【发布时间】:2019-04-16 07:53:56
【问题描述】:
我正在开发一个 React Native 项目,我使用 Jenkins CI 生成 Android 生产版本。我的 CI 配置首先使用以下命令安装依赖项,然后再继续生成 JS Bundle 并将其传递给 Android Build:
npm install --production
我最近也将我的 React Native 版本更新为 0.57.4 ,之后我还需要切换到 metro-react-native-babel-preset (v0.49.1)。我在package.json 中将其添加到我的devDependencies 中,并像这样更新了我的.babelrc:
{
"presets": [
"module:metro-react-native-babel-preset"
],
...
}
(如此处所述:https://github.com/facebook/metro/tree/master/packages/metro-react-native-babel-preset)
从那时起,CI 服务器上的任务失败(但在我的本地机器上很好),说 Error: Cannot find module 'metro-react-native-babel-preset' 因为预设已添加到 devDependencies 并且 --production 停止 npm 安装任何 @987654334 @
(如此处所述 - “https://docs.npmjs.com/cli/install” - “使用 --production 标志(或当 NODE_ENV 环境变量设置为生产时),npm 将不会安装 devDependencies 中列出的模块”)。
我应该在dependencies 中添加预设,更改我的 CI 配置还是应该做一些不同的事情?
到现在都是默认配置,即:
{
"presets": [
"react-native"
],
...
}
工作正常,但在 React Native 更新后,我开始收到错误。
【问题讨论】:
-
这是 npm 模块的常见问题。几个月前,我对 babel stackoverflow.com/questions/51686071/… 也有类似的问题,另外,这不是 jenkins 问题
-
此依赖项 metro-react-native-babel-preset 是否需要执行生产的通用命令:npm run build ??您在生产环境中执行什么命令?
-
这个依赖是一个 babel 预设,这意味着它做了一些重要的转译。因此,即使在生产版本中它也绝对需要运行(尽管它不必是输出包的一部分)
-
因此,如果需要构建此依赖项,则它必须在依赖项部分但在 devDependencies 中。它是否正确?另外,如何添加这种依赖关系? npm install -i ....
-
作为一般做法,babel 预设保存在 devDependencies 中,因此使用
npm install --save-dev <dependency>添加
标签: android node.js react-native jenkins babeljs