【问题标题】:React Native: should there be a "production" flag in the NPM install step on the CI?React Native:CI 的 NPM 安装步骤中是否应该有一个“生产”标志?
【发布时间】: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


【解决方案1】:

我通过删除 --production 标志解决了这个问题

【讨论】:

    猜你喜欢
    • 2020-06-20
    • 2014-11-10
    • 2020-07-12
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2020-12-04
    • 1970-01-01
    相关资源
    最近更新 更多