-
Notifications
You must be signed in to change notification settings - Fork 25.2k
[CLI] Remove dependency on Ruby #440
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 4 commits
132f8fa
2e2e577
9caee32
29325d7
04832e5
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,62 @@ | ||
| 'use strict'; | ||
|
|
||
| var path = require('path'); | ||
| var fs = require('fs'); | ||
|
|
||
| function init(projectDir, appName) { | ||
| console.log('Setting up new React Native app in ' + projectDir); | ||
| var source = path.resolve(__dirname, '..', 'Examples/SampleApp'); | ||
|
|
||
| walk(source).forEach(function(f) { | ||
| f = f.replace(source + '/', ''); // Strip off absolute path | ||
| if(f === 'project.xcworkspace' || f === 'xcuserdata') { return; } | ||
|
|
||
| var replacements = { | ||
| 'Examples/SampleApp/': '', | ||
| '../../Libraries/': 'node_modules/react-native/Libraries/', | ||
| '../../React/': 'node_modules/react-native/React/', | ||
| 'SampleApp': appName | ||
| }; | ||
|
|
||
| var dest = f.replace(/SampleApp/g, appName).replace(/^_/, "."); | ||
| copyAndReplace( | ||
| path.resolve(source, f), | ||
| path.resolve(projectDir, dest), | ||
| replacements | ||
| ); | ||
| }); | ||
|
|
||
| console.log('Next Steps:'); | ||
| console.log(' Open ' + path.resolve(projectDir, appName) + '.xcodeproj in Xcode'); | ||
| console.log(' Hit Run button'); | ||
| console.log(''); | ||
| } | ||
|
|
||
| function copyAndReplace(src, dest, replacements) { | ||
| if (fs.lstatSync(src).isDirectory()) { | ||
| if (!fs.existsSync(dest)) { | ||
| fs.mkdirSync(dest); | ||
| } | ||
| } | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: else in the same line as } |
||
| else { | ||
| var content = fs.readFileSync(src, 'utf8'); | ||
| Object.keys(replacements).forEach(function(regex) { | ||
| content = content.replace(new RegExp(regex, 'g'), replacements[regex]); | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. none of the replacements are regexes nor need to be applied multiple times, can you not use a regex for it?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The only reason these are regex's is that I want to replace all occurrences of the token in each file. Really I need to escape the function replaceAll(str, search, replacement) {
return str.split(search).join(replacement);
} |
||
| }); | ||
| fs.writeFileSync(dest, content); | ||
| } | ||
| } | ||
|
|
||
| function walk(current) { | ||
| if(fs.lstatSync(current).isDirectory()) { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: space after |
||
| var files = fs.readdirSync(current).map(function(child) { | ||
| child = path.join(current, child); | ||
| return walk(child); | ||
| }); | ||
| return [].concat.apply([current], files); | ||
| } else { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: you don't need else because you return but, I usually like to first clear the pre-conditions this way it removes many levels of indentation if (!fs.lstatSync(current).isDirectory()) {
return [current];
}
var files = fs.readdirSync(current).map(function(child) {
child = path.join(current, child);
return walk(child);
});
return [].concat.apply([current], files); |
||
| return [current]; | ||
| } | ||
| } | ||
|
|
||
| module.exports = init; | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: space after
if. Also, can you putreturn;on its own line?