mirror of
https://github.com/status-im/react-native.git
synced 2025-02-27 00:20:31 +00:00
Summary: This is the next incremental step to rewrite node-haste. I apologize for the size of this diff but there is really no smaller way to do this. The current architecture passes a single file watcher instance into many classes that each subscribe to file changes. It's really hard to keep track of this. The new implementation reduces the listeners to two (will eventually be just one!) - one in DependencyGraph and one in it's parent's parent's parent (ugh! This doesn't make any sense). This should make it much more straightforward to understand what happens when a file changes. I was able to remove a bunch of tests because jest's watcher takes care of things like ignore patterns. Some of the tests were specifically testing for whether the change events were invoked and they are now much more straightforward as well by manually invoking the `processFileChange` methods. (Relanding a fixed version of D4161662) Reviewed By: kentaromiura Differential Revision: D4194378 fbshipit-source-id: 8c008247a911573f6b5f6b0b374d50d38f62a4f5
88 lines
2.8 KiB
JavaScript
88 lines
2.8 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';
|
|
|
|
const log = require('../util/log').out('bundle');
|
|
const Promise = require('promise');
|
|
const Server = require('../../packager/react-packager/src/Server');
|
|
|
|
const outputBundle = require('./output/bundle');
|
|
const path = require('path');
|
|
const saveAssets = require('./saveAssets');
|
|
const defaultAssetExts = require('../../packager/defaults').assetExts;
|
|
|
|
function saveBundle(output, bundle, args) {
|
|
return Promise.resolve(
|
|
output.save(bundle, args, log)
|
|
).then(() => bundle);
|
|
}
|
|
|
|
function buildBundle(args, config, output = outputBundle, packagerInstance) {
|
|
// This is used by a bazillion of npm modules we don't control so we don't
|
|
// have other choice than defining it as an env variable here.
|
|
process.env.NODE_ENV = args.dev ? 'development' : 'production';
|
|
|
|
const requestOpts = {
|
|
entryFile: args.entryFile,
|
|
sourceMapUrl: args.sourcemapOutput && path.basename(args.sourcemapOutput),
|
|
dev: args.dev,
|
|
minify: !args.dev,
|
|
platform: args.platform,
|
|
};
|
|
|
|
// If a packager instance was not provided, then just create one for this
|
|
// bundle command and close it down afterwards.
|
|
var shouldClosePackager = false;
|
|
if (!packagerInstance) {
|
|
const assetExts = (config.getAssetExts && config.getAssetExts()) || [];
|
|
|
|
const transformModulePath =
|
|
args.transformer ? path.resolve(args.transformer) :
|
|
typeof config.getTransformModulePath === 'function' ? config.getTransformModulePath() :
|
|
undefined;
|
|
|
|
const options = {
|
|
projectRoots: config.getProjectRoots(),
|
|
assetExts: defaultAssetExts.concat(assetExts),
|
|
assetRoots: config.getAssetRoots(),
|
|
blacklistRE: config.getBlacklistRE(),
|
|
getTransformOptionsModulePath: config.getTransformOptionsModulePath,
|
|
transformModulePath: transformModulePath,
|
|
extraNodeModules: config.extraNodeModules,
|
|
resetCache: args.resetCache,
|
|
watch: false,
|
|
};
|
|
|
|
packagerInstance = new Server(options);
|
|
shouldClosePackager = true;
|
|
}
|
|
|
|
const bundlePromise = output.build(packagerInstance, requestOpts)
|
|
.then(bundle => {
|
|
if (shouldClosePackager) {
|
|
packagerInstance.end();
|
|
}
|
|
return saveBundle(output, bundle, args);
|
|
});
|
|
|
|
// Save the assets of the bundle
|
|
const assets = bundlePromise
|
|
.then(bundle => bundle.getAssets())
|
|
.then(outputAssets => saveAssets(
|
|
outputAssets,
|
|
args.platform,
|
|
args.assetsDest,
|
|
));
|
|
|
|
// When we're done saving bundle output and the assets, we're done.
|
|
return assets;
|
|
}
|
|
|
|
module.exports = buildBundle;
|