首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React-Native Packager API

React-Native Packager API
EN

Stack Overflow用户
提问于 2016-05-04 23:26:33
回答 2查看 990关注 0票数 2

所以在我谈到问题之前,这是我想要做的。我希望能够将我的index.ios.js文件提供给React打包程序,并让它为我生成一个包。我想在JS中完成这一切(例如,我不想运行一个监控我的js文件的包服务器,等等)。换句话说,我希望使打包程序保持非常轻量级,并且只需创建一个新的打包程序实例并调用一些JS,就可以轻松地创建打包程序的许多实例。

因此,我一直试图拼凑一个JS脚本来做这件事,但我一直很艰难。这是我到目前为止的脚本(请原谅我的糟糕风格,因为我来自Obj-C领域,这是我的第一个大型NodeJS项目):

代码语言:javascript
复制
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',
});

凉爽的!因此,打包程序正在缓慢前进,但它最终被卡住了:

代码语言:javascript
复制
[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模块,我会得到:

代码语言:javascript
复制
[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正在试图利用它的一个工人,但是因为我在幕后手动运行打包程序,工人还没有被正确地产生吗?这完全是胡说八道,但我迷路了。

任何帮助都将不胜感激。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2016-05-04 23:55:49

React原生命令行界面已经提供了一个bundle命令,你可以像这样使用命令

代码语言:javascript
复制
react-native bundle --entry-file index.ios.js --platform ios --dev false --bundle-output dist/app.bundle.js
票数 0
EN

Stack Overflow用户

发布于 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不足的问题!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37032037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档