mirror of
https://github.com/status-im/react-native.git
synced 2025-01-29 02:35:41 +00:00
17e0478cf4
Summary: * Internally, we already set up babel before calling into metro-bundler. * Externally, I moved the setup calls to outside the packager/ folder. If somebody has a custom integration with RN, they would need to setup babel themselves up until we make the open source split. By the time this is released in open source, an npm version of metro-bundler will be available for use. Next step: also do this for the worker and remove setupBabel from the metro repo. Reviewed By: davidaurelio Differential Revision: D5121429 fbshipit-source-id: e77c6ccc23bef1d13fd74c4727be2d7e09d2d0ca
103 lines
3.0 KiB
JavaScript
103 lines
3.0 KiB
JavaScript
/**
|
|
* 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';
|
|
|
|
require('../../setupBabel')();
|
|
const ReactPackager = require('../../packager');
|
|
|
|
const denodeify = require('denodeify');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
function dependencies(argv, config, args, packagerInstance) {
|
|
const rootModuleAbsolutePath = args.entryFile;
|
|
if (!fs.existsSync(rootModuleAbsolutePath)) {
|
|
return Promise.reject(`File ${rootModuleAbsolutePath} does not exist`);
|
|
}
|
|
|
|
const transformModulePath =
|
|
args.transformer ? path.resolve(args.transformer) :
|
|
typeof config.getTransformModulePath === 'function' ? config.getTransformModulePath() :
|
|
undefined;
|
|
|
|
const packageOpts = {
|
|
projectRoots: config.getProjectRoots(),
|
|
blacklistRE: config.getBlacklistRE(),
|
|
getTransformOptions: config.getTransformOptions,
|
|
hasteImpl: config.hasteImpl,
|
|
transformModulePath: transformModulePath,
|
|
extraNodeModules: config.extraNodeModules,
|
|
verbose: config.verbose,
|
|
};
|
|
|
|
const relativePath = packageOpts.projectRoots.map(root =>
|
|
path.relative(
|
|
root,
|
|
rootModuleAbsolutePath
|
|
)
|
|
)[0];
|
|
|
|
const options = {
|
|
platform: args.platform,
|
|
entryFile: relativePath,
|
|
};
|
|
|
|
const writeToFile = args.output;
|
|
const outStream = writeToFile
|
|
? fs.createWriteStream(args.output)
|
|
: process.stdout;
|
|
|
|
return Promise.resolve((packagerInstance ?
|
|
packagerInstance.getOrderedDependencyPaths(options) :
|
|
ReactPackager.getOrderedDependencyPaths(packageOpts, options)).then(
|
|
deps => {
|
|
deps.forEach(modulePath => {
|
|
// Temporary hack to disable listing dependencies not under this directory.
|
|
// Long term, we need either
|
|
// (a) JS code to not depend on anything outside this directory, or
|
|
// (b) Come up with a way to declare this dependency in Buck.
|
|
const isInsideProjectRoots = packageOpts.projectRoots.filter(
|
|
root => modulePath.startsWith(root)
|
|
).length > 0;
|
|
|
|
if (isInsideProjectRoots) {
|
|
outStream.write(modulePath + '\n');
|
|
}
|
|
});
|
|
return writeToFile
|
|
? denodeify(outStream.end).bind(outStream)()
|
|
: Promise.resolve();
|
|
}
|
|
));
|
|
}
|
|
|
|
module.exports = {
|
|
name: 'dependencies',
|
|
func: dependencies,
|
|
options: [
|
|
{
|
|
command: '--entry-file <path>',
|
|
description: 'Absolute path to the root JS file',
|
|
}, {
|
|
command: '--output [path]',
|
|
description: 'File name where to store the output, ex. /tmp/dependencies.txt',
|
|
}, {
|
|
command: '--platform [extension]',
|
|
description: 'The platform extension used for selecting modules',
|
|
}, {
|
|
command: '--transformer [path]',
|
|
description: 'Specify a custom transformer to be used'
|
|
}, {
|
|
command: '--verbose',
|
|
description: 'Enables logging',
|
|
default: false,
|
|
},
|
|
],
|
|
};
|