mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-24 04:16:00 +08:00
Further RNPM integration
Summary: This commit removes `rnpm` folder that we left during initial merge to keep the diff cleaner. The `core`, `link` and `install` have now the same directory structure as any other command to make development more natural for all of us. From most notable differences: 1) the `src` folder is now gone. The new structure should make it easier for people to work with the stuff and also move us closer to 100% rnpm integration, 2) There's also no `package.json` present in any of the `rnpm` packages, since they are no longer standalone modules, 3) There's no `bugs.url` in link.js since main package.json of React doesn't specify it. Decided to hardcode it to facebook/react-native since it's really unlikely to change. If one would prefer to use pkg.bugs.url as before, a separate PR modifying package.json should be sent. Closes https://github.com/facebook/react-native/pull/9509 Differential Revision: D3751115 fbshipit-source-id: 74ae8330f7634df0887ad676808f47eee4b8de85
This commit is contained in:
committed by
Facebook Github Bot 3
parent
25f2a26ce9
commit
0af640bfae
67
local-cli/core/findPlugins.js
Normal file
67
local-cli/core/findPlugins.js
Normal file
@@ -0,0 +1,67 @@
|
||||
const path = require('path');
|
||||
const union = require('lodash').union;
|
||||
const uniq = require('lodash').uniq;
|
||||
const flatten = require('lodash').flatten;
|
||||
|
||||
/**
|
||||
* Filter dependencies by name pattern
|
||||
* @param {String} dependency Name of the dependency
|
||||
* @return {Boolean} If dependency is a rnpm plugin
|
||||
*/
|
||||
const isRNPMPlugin = (dependency) => dependency.indexOf('rnpm-plugin-') === 0;
|
||||
const isReactNativePlugin = (dependency) => dependency.indexOf('react-native-') === 0;
|
||||
|
||||
const readPackage = (folder) => {
|
||||
try {
|
||||
return require(path.join(folder, 'package.json'));
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
const findPluginsInReactNativePackage = (pjson) => {
|
||||
if (!pjson.rnpm || !pjson.rnpm.plugin) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return path.join(pjson.name, pjson.rnpm.plugin);
|
||||
};
|
||||
|
||||
const findPluginInFolder = (folder) => {
|
||||
const pjson = readPackage(folder);
|
||||
|
||||
if (!pjson) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const deps = union(
|
||||
Object.keys(pjson.dependencies || {}),
|
||||
Object.keys(pjson.devDependencies || {})
|
||||
);
|
||||
|
||||
return deps.reduce(
|
||||
(acc, pkg) => {
|
||||
if (isRNPMPlugin(pkg)) {
|
||||
return acc.concat(pkg);
|
||||
}
|
||||
if (isReactNativePlugin(pkg)) {
|
||||
const pkgJson = readPackage(path.join(folder, 'node_modules', pkg));
|
||||
if (!pkgJson) {
|
||||
return acc;
|
||||
}
|
||||
return acc.concat(findPluginsInReactNativePackage(pkgJson));
|
||||
}
|
||||
return acc;
|
||||
},
|
||||
[]
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Find plugins in package.json of the given folder
|
||||
* @param {String} folder Path to the folder to get the package.json from
|
||||
* @type {Array} Array of plugins or an empty array if no package.json found
|
||||
*/
|
||||
module.exports = function findPlugins(folders) {
|
||||
return uniq(flatten(folders.map(findPluginInFolder)));
|
||||
};
|
||||
Reference in New Issue
Block a user