mirror of
https://github.com/status-im/react-native.git
synced 2025-02-03 13:14:42 +00:00
Use Yarn for Install/Uninstall CLI if available
Summary: Make `react-native install` and `uninstall` cli to use yarn if available (fixes #11122) **Test plan Yarn** 1. Publish to Sinopia: https://github.com/facebook/react-native/tree/master/react-native-cli 2. react-native init AwesomeApp 3. react-native install react-native-fit-image 4. react-native uninstall react-native-fit-image **Test plan NPM** 1. Publish to Sinopia: https://github.com/facebook/react-native/tree/master/react-native-cli 2. react-native init AwesomeAppNPM --npm 3. react-native install react-native-fit-image 4. react-native uninstall react-native-fit-image **output (yarn.lock)** ``` > react-native install react-native-fit-image yarn add v0.16.1 [1/4] 🔍 Resolving packages... [2/4] 🚚 Fetching packages... [3/4] 🔗 Linking dependencies... [4/4] 📃 Building fresh packages... success Saved lockfile. success Saved 1 new dependency └─ react-native-fit-image@1.4.6 ✨ Done in 4.11s. rnpm-install info Module react-native-fit-image has been successfully Closes https://github.com/facebook/react-native/pull/11174 Differential Revision: D4441872 fbshipit-source-id: 05bd30e1ad14bdbe861259c88e1f18df77cfa54f
This commit is contained in:
parent
4d2512aef9
commit
1c249e4804
@ -1,5 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2015-present, Facebook, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the BSD-style license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree. An additional grant
|
||||||
|
* of patent rights can be found in the PATENTS file in the same directory.
|
||||||
|
*/
|
||||||
|
'use strict';
|
||||||
|
|
||||||
const spawnSync = require('child_process').spawnSync;
|
const spawnSync = require('child_process').spawnSync;
|
||||||
const log = require('npmlog');
|
const log = require('npmlog');
|
||||||
|
const PackageManager = require('../util/PackageManager');
|
||||||
const spawnOpts = {
|
const spawnOpts = {
|
||||||
stdio: 'inherit',
|
stdio: 'inherit',
|
||||||
stdin: 'inherit',
|
stdin: 'inherit',
|
||||||
@ -10,20 +21,20 @@ log.heading = 'rnpm-install';
|
|||||||
function install(args, config) {
|
function install(args, config) {
|
||||||
const name = args[0];
|
const name = args[0];
|
||||||
|
|
||||||
var res = spawnSync('npm', ['install', name, '--save'], spawnOpts);
|
let res = PackageManager.add(name);
|
||||||
|
|
||||||
if (res.status) {
|
if (res.status) {
|
||||||
process.exit(res.status);
|
process.exit(res.status);
|
||||||
}
|
}
|
||||||
|
|
||||||
res = spawnSync('rnpm', ['link', name], spawnOpts);
|
res = spawnSync('react-native', ['link', name], spawnOpts);
|
||||||
|
|
||||||
if (res.status) {
|
if (res.status) {
|
||||||
process.exit(res.status);
|
process.exit(res.status);
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info(`Module ${name} has been successfully installed & linked`);
|
log.info(`Module ${name} has been successfully installed & linked`);
|
||||||
};
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
func: install,
|
func: install,
|
||||||
|
@ -1,5 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2015-present, Facebook, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the BSD-style license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree. An additional grant
|
||||||
|
* of patent rights can be found in the PATENTS file in the same directory.
|
||||||
|
*/
|
||||||
|
'use strict';
|
||||||
|
|
||||||
const spawnSync = require('child_process').spawnSync;
|
const spawnSync = require('child_process').spawnSync;
|
||||||
const log = require('npmlog');
|
const log = require('npmlog');
|
||||||
|
const PackageManager = require('../util/PackageManager');
|
||||||
const spawnOpts = {
|
const spawnOpts = {
|
||||||
stdio: 'inherit',
|
stdio: 'inherit',
|
||||||
stdin: 'inherit',
|
stdin: 'inherit',
|
||||||
@ -10,20 +21,20 @@ log.heading = 'rnpm-install';
|
|||||||
function uninstall(args, config) {
|
function uninstall(args, config) {
|
||||||
const name = args[0];
|
const name = args[0];
|
||||||
|
|
||||||
var res = spawnSync('rnpm', ['unlink', name], spawnOpts);
|
var res = spawnSync('react-native', ['unlink', name], spawnOpts);
|
||||||
|
|
||||||
if (res.status) {
|
if (res.status) {
|
||||||
process.exit(res.status);
|
process.exit(res.status);
|
||||||
}
|
}
|
||||||
|
|
||||||
res = spawnSync('npm', ['uninstall', name], spawnOpts);
|
res = PackageManager.remove(name);
|
||||||
|
|
||||||
if (res.status) {
|
if (res.status) {
|
||||||
process.exit(res.status);
|
process.exit(res.status);
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info(`Module ${name} has been successfully uninstalled & unlinked`);
|
log.info(`Module ${name} has been successfully uninstalled & unlinked`);
|
||||||
};
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
func: uninstall,
|
func: uninstall,
|
||||||
|
@ -141,7 +141,11 @@ function link(args, config) {
|
|||||||
return Promise.reject(err);
|
return Promise.reject(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
const packageName = args[0];
|
let packageName = args[0];
|
||||||
|
// Check if install package by specific version (eg. package@latest)
|
||||||
|
if (packageName !== undefined) {
|
||||||
|
packageName = packageName.split('@')[0];
|
||||||
|
}
|
||||||
|
|
||||||
const dependencies = getDependencyConfig(
|
const dependencies = getDependencyConfig(
|
||||||
config,
|
config,
|
||||||
|
74
local-cli/util/PackageManager.js
Normal file
74
local-cli/util/PackageManager.js
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2015-present, Facebook, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the BSD-style license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree. An additional grant
|
||||||
|
* of patent rights can be found in the PATENTS file in the same directory.
|
||||||
|
*/
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const spawnSync = require('child_process').spawnSync;
|
||||||
|
const yarn = require('../util/yarn');
|
||||||
|
const spawnOpts = {
|
||||||
|
stdio: 'inherit',
|
||||||
|
stdin: 'inherit',
|
||||||
|
};
|
||||||
|
|
||||||
|
const projectDir = process.cwd();
|
||||||
|
const isYarnAvailable =
|
||||||
|
yarn.getYarnVersionIfAvailable() &&
|
||||||
|
yarn.isGlobalCliUsingYarn(projectDir);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute npm or yarn command
|
||||||
|
*
|
||||||
|
* @param {String} yarnCommand Yarn command to be executed eg. yarn add package
|
||||||
|
* @param {String} npmCommand Npm command to be executed eg. npm install package
|
||||||
|
* @return {object} spawnSync's result object
|
||||||
|
*/
|
||||||
|
function callYarnOrNpm(yarnCommand, npmCommand) {
|
||||||
|
let command;
|
||||||
|
|
||||||
|
if (isYarnAvailable) {
|
||||||
|
command = yarnCommand;
|
||||||
|
} else {
|
||||||
|
command = npmCommand;
|
||||||
|
}
|
||||||
|
|
||||||
|
const args = command.split(' ');
|
||||||
|
const cmd = args.shift();
|
||||||
|
|
||||||
|
const res = spawnSync(cmd, args, spawnOpts);
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install package into project using npm or yarn if available
|
||||||
|
* @param {[type]} packageName Package to be installed
|
||||||
|
* @return {[type]} spawnSync's result object
|
||||||
|
*/
|
||||||
|
function add(packageName) {
|
||||||
|
return callYarnOrNpm(
|
||||||
|
`yarn add ${packageName}`,
|
||||||
|
`npm install ${packageName} --save`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uninstall package from project using npm or yarn if available
|
||||||
|
* @param {[type]} packageName Package to be uninstalled
|
||||||
|
* @return {Object} spawnSync's result object
|
||||||
|
*/
|
||||||
|
function remove(packageName) {
|
||||||
|
return callYarnOrNpm(
|
||||||
|
`yarn remove ${packageName}`,
|
||||||
|
`npm uninstall --save ${packageName}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
add: add,
|
||||||
|
remove: remove,
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user