所以在我谈到问题之前,这是我想要做的。我希望能够将我的index.ios.js文件提供给React打包程序,并让它为我生成一个包。我想在JS中完成这一切(例如,我不想运行一个监控我的js文件的包服务器,等等)。换句话说,我希望使打包程序保持非常轻量级,并且只需创建一个新的打包程序实例并调用一些JS,就可以轻松地创建打包程序的许多实例。
因此,我一直试图拼凑一个JS脚本来做这件事,但我一直很艰难。这是我到目前为止的脚本(请原谅我的糟糕风格,因为我来自Obj-C领域,这是我的第一个大型NodeJS项目):
var ReactPackager = require('react-native/packager/react-packager')
var AssetServer = require('react-native/packager/react-packager/src/AssetServer');
var Bundler = require('react-native/packager/react-packager/src/Bundler')
var FileWatcher = require('node-haste').FileWatcher;
const transformModulePath = `${__dirname}/node_modules/react-native/packager/transformer.js`;
const bundler = new Bundler({
projectRoots: [__dirname],
fileWatcher: FileWatcher.createDummyWatcher(),
assetServer: new AssetServer({
projectRoots: [__dirname],
assetExts: [],
}),
transformModulePath: transformModulePath
});
bundler.bundle({
entryFile: `${__dirname}/tmp/index.ios.js`,
dev: false,
minify: true,
platform: 'ios',
});凉爽的!因此,打包程序正在缓慢前进,但它最终被卡住了:
[8:16:33 AM] <START> Building Dependency Graph
[8:16:33 AM] <START> Crawling File System
[8:16:33 AM] <START> find dependencies
[8:16:35 AM] <END> Crawling File System (2203ms)
[8:16:35 AM] <START> Building in-memory fs for JavaScript
[8:16:35 AM] <END> Building in-memory fs for JavaScript (107ms)
[8:16:35 AM] <START> Building Haste Map
Failed to build DependencyGraph: @providesModule naming collision:
Duplicate module name: React
Paths: /Users/staufman/dev/karma/.KarmaTemplate/node_modules/react/lib/React.js collides with /Users/staufman/dev/karma/.KarmaTemplate/node_modules/react-native/Libraries/ReactNative/React.js
This error is caused by a @providesModule declaration with the same name accross two different files.
Error: @providesModule naming collision:
Duplicate module name: React
Paths: /Users/staufman/dev/karma/.KarmaTemplate/node_modules/react/lib/React.js collides with /Users/staufman/dev/karma/.KarmaTemplate/node_modules/react-native/Libraries/ReactNative/React.js好的,所以看起来安装的React和React-Native模块发生了冲突。如果我删除React模块,我会得到:
[8:20:42 AM] <START> Building Dependency Graph
[8:20:42 AM] <START> Crawling File System
[8:20:42 AM] <START> find dependencies
[8:20:44 AM] <END> Crawling File System (1634ms)
[8:20:44 AM] <START> Building in-memory fs for JavaScript
[8:20:44 AM] <END> Building in-memory fs for JavaScript (100ms)
[8:20:44 AM] <START> Building Haste Map
[8:20:44 AM] <END> Building Haste Map (84ms)
[8:20:44 AM] <END> Building Dependency Graph (1826ms)
transformed 1/2 (50%)然后,它就卡在这一步了。我试过调试内部结构,但实际上我不知道这条消息(转换后的1/2)打印在哪里,以及为什么它会出错。我猜transformer正在试图利用它的一个工人,但是因为我在幕后手动运行打包程序,工人还没有被正确地产生吗?这完全是胡说八道,但我迷路了。
任何帮助都将不胜感激。谢谢!
发布于 2016-05-04 23:55:49
React原生命令行界面已经提供了一个bundle命令,你可以像这样使用命令
react-native bundle --entry-file index.ios.js --platform ios --dev false --bundle-output dist/app.bundle.js发布于 2016-05-26 08:55:42
在断断续续地解决了这个问题之后,事实证明运行服务器是一种可行的方法。关键是要意识到进程是受I/O限制的,而不仅仅是CPU受限制的。
在捆绑时,服务器会停止,我意识到这可能与AWS实例上可用的有限RAM有关。
我发现了一篇关于如何增加Linux机器的交换空间的很棒的文章:
https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04
通过添加2 2GB的交换空间,捆绑服务器不再停滞。事实证明,这一定是RAM不足的问题!
https://stackoverflow.com/questions/37032037
复制相似问题