Socket
Socket
Sign inDemoInstall

react-native-cli

Package Overview
Dependencies
Maintainers
7
Versions
16
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-native-cli - npm Package Compare versions

Comparing version 1.0.0 to 1.2.0

101

index.js

@@ -41,2 +41,3 @@ #!/usr/bin/env node

var exec = require('child_process').exec;
var execSync = require('child_process').execSync;
var spawn = require('child_process').spawn;

@@ -78,2 +79,29 @@ var chalk = require('chalk');

// Use Yarn if available, it's much faster than the npm client.
// Return the version of yarn installed on the system, null if yarn is not available.
function getYarnVersionIfAvailable() {
let yarnVersion;
try {
// execSync returns a Buffer -> convert to string
if (process.platform.startsWith('win')) {
yarnVersion = (execSync('yarn --version').toString() || '').trim();
} else {
yarnVersion = (execSync('yarn --version 2>/dev/null').toString() || '').trim();
}
} catch (error) {
return null;
}
// yarn < 0.16 has a 'missing manifest' bug
try {
if (semver.gte(yarnVersion, '0.16.0')) {
return yarnVersion;
} else {
return null;
}
} catch (error) {
console.error('Cannot parse yarn version: ' + yarnVersion);
return null;
}
}
checkForVersionArgument();

@@ -107,3 +135,4 @@

} else {
init(commands[1], argv.verbose, argv.version);
const rnPackage = argv.version;
init(commands[1], argv.verbose, rnPackage, argv.npm);
}

@@ -114,3 +143,3 @@ break;

'Command `%s` unrecognized. ' +
'Did you mean to run this inside a react-native project?',
'Make sure that you have run `npm install` and that you are inside a react-native project.',
commands[0]

@@ -123,3 +152,3 @@ );

function validatePackageName(name) {
function validateProjectName(name) {
if (!name.match(/^[$A-Z_][0-9A-Z_$]*$/i)) {

@@ -144,13 +173,20 @@ console.error(

function init(name, verbose, rnPackage) {
validatePackageName(name);
/**
* @param name Project name, e.g. 'AwesomeApp'.
* @param verbose If true, will run 'npm install' in verbose mode (for debugging).
* @param rnPackage Version of React Native to install, e.g. '0.38.0'.
* @param forceNpmClient If true, always use the npm command line client,
* don't use yarn even if available.
*/
function init(name, verbose, rnPackage, forceNpmClient) {
validateProjectName(name);
if (fs.existsSync(name)) {
createAfterConfirmation(name, verbose, rnPackage);
createAfterConfirmation(name, verbose, rnPackage, forceNpmClient);
} else {
createProject(name, verbose, rnPackage);
createProject(name, verbose, rnPackage, forceNpmClient);
}
}
function createAfterConfirmation(name, verbose, rnPackage) {
function createAfterConfirmation(name, verbose, rnPackage, forceNpmClient) {
prompt.start();

@@ -168,3 +204,3 @@

if (result.yesno[0] === 'y') {
createProject(name, verbose, rnPackage);
createProject(name, verbose, rnPackage, forceNpmClient);
} else {

@@ -177,3 +213,3 @@ console.log('Project initialization canceled');

function createProject(name, verbose, rnPackage) {
function createProject(name, verbose, rnPackage, forceNpmClient) {
var root = path.resolve(name);

@@ -202,8 +238,6 @@ var projectName = path.basename(root);

console.log('Installing react-native package from npm...');
if (verbose) {
runVerbose(root, projectName, rnPackage);
runVerbose(root, projectName, rnPackage, forceNpmClient);
} else {
run(root, projectName, rnPackage);
run(root, projectName, rnPackage, forceNpmClient);
}

@@ -214,5 +248,5 @@ }

var packageToInstall = 'react-native';
var valideSemver = semver.valid(rnPackage);
if (valideSemver) {
packageToInstall += '@' + valideSemver;
var isValidSemver = semver.valid(rnPackage);
if (isValidSemver) {
packageToInstall += '@' + isValidSemver;
} else if (rnPackage) {

@@ -225,14 +259,25 @@ // for tar.gz or alternative paths

function run(root, projectName, rnPackage) {
exec('npm install --save --save-exact ' + getInstallPackage(rnPackage), function(e, stdout, stderr) {
if (e) {
function run(root, projectName, rnPackage, forceNpmClient) {
const yarnVersion = (!forceNpmClient) && getYarnVersionIfAvailable();
let installCommand;
if (yarnVersion) {
console.log('Using yarn v' + yarnVersion);
console.log('Installing ' + getInstallPackage(rnPackage) + '...');
installCommand = 'yarn add ' + getInstallPackage(rnPackage) + ' --exact';
} else {
console.log('Installing ' + getInstallPackage(rnPackage) + ' from npm...');
if (!forceNpmClient) {
console.log('Consider installing yarn to make this faster: https://yarnpkg.com');
}
installCommand = 'npm install --save --save-exact ' + getInstallPackage(rnPackage);
}
exec(installCommand, function(err, stdout, stderr) {
if (err) {
console.log(stdout);
console.error(stderr);
console.error('`npm install --save --save-exact react-native` failed');
console.error('Command `' + installCommand + '` failed.');
process.exit(1);
}
checkNodeVersion();
var cli = require(CLI_MODULE_PATH());
cli = require(CLI_MODULE_PATH());
cli.init(root, projectName);

@@ -242,4 +287,6 @@ });

function runVerbose(root, projectName, rnPackage) {
var proc = spawn('npm', ['install', '--verbose', '--save', '--save-exact', getInstallPackage(rnPackage)], {stdio: 'inherit'});
function runVerbose(root, projectName, rnPackage, forceNpmClient) {
// Use npm client, yarn doesn't support --verbose yet
console.log('Installing ' + getInstallPackage(rnPackage) + ' from npm. This might take a while...');
var proc = spawn(/^win/.test(process.platform) ? 'npm.cmd' : 'npm', ['install', '--verbose', '--save', '--save-exact', getInstallPackage(rnPackage)], {stdio: 'inherit'});
proc.on('close', function (code) {

@@ -278,3 +325,3 @@ if (code !== 0) {

} catch (e) {
console.log('react-native: n/a - not inside a React Native project directory')
console.log('react-native: n/a - not inside a React Native project directory');
}

@@ -281,0 +328,0 @@ process.exit();

{
"name": "react-native-cli",
"version": "1.0.0",
"version": "1.2.0",
"license": "BSD-3-Clause",

@@ -5,0 +5,0 @@ "description": "The React Native CLI tools",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc