决定是将软件包保存到devDependencies还是dependencies?

11

我正在构建一个React/Express应用程序,并希望确保我设置了package.json,以便开发人员包放在devDependencies下,生产环境的包放在dependencies下。

在下载新的npm包时,快速确定是否可以使用--save--save-dev来保存它的最快方法是什么?例如,这是我的当前package.json

  "devDependencies": {
    "babel-eslint": "^7.2.3",
    "babel-loader": "^7.1.2",
    "eslint": "^4.6.0",
    "eslint-plugin-react": "^7.3.0",
    "jest": "^20.0.4"
  },
  "dependencies": {
    "babel-cli": "^6.26.0",
    "babel-polyfill": "^6.26.0",
    "babel-preset-env": "^1.6.0",
    "babel-preset-react": "^6.24.1",
    "babel-preset-stage-2": "^6.24.1",
    "ejs": "^2.5.7",
    "express": "^4.15.4",
    "pm2": "^2.6.1",
    "react": "^15.6.1",
    "react-dom": "^15.6.1",
    "webpack": "^3.5.5"
  }

我很难确定每个软件包应该放在哪个部分。我试着为每个依赖项查找答案,但从未得到过确切的答案,所以我不知道我是否做得最优。

在下载npm软件包时,如何确定是否可以使用--save-dev来保存它?

2个回答

10
通常情况下,dependencies (--save) 是指应用程序代码中引用的包:当有人使用您的应用程序时运行的代码。 devDependencies (--save-dev) 是指应用程序开发人员使用的包:编译/构建工具和测试。
在npm或node中没有严格限制要求将包x放入dependencies还是devDependencies。你可以在任一部分安装webpack,但如果我们遵循上述逻辑,最适合它的部分是devDependencies
当您将包发布到npm时,执行npm install命令安装您的软件包的用户可以选择安装软件包的代码、dependencies(通常情况下),devDependencies或两者兼备。 如果他们不会修改您软件包中的代码,则不需要从devDependencies获取任何内容。这是将这两个部分保持清晰分离的原因之一。

1
好的,但是如果我不太了解一个包,并且不确定是否应该将其下载到devDependencies还是常规依赖中,那么我找出最佳方法是什么?我只需要去它的npm页面看一下吗? - MarksCode
是的。您可以通过编辑 package.json 在任何时候在 dependenciesdevDependencies 之间移动软件包,因此如果第一次安装时安装在错误的位置,则不是一个大问题。 - user2943490
这个回答并没有回答问题,问题是,我如何知道在生产环境中是否需要特定的软件包(在那里我将无法使用devDependencies)。 - Chris

4
这是我的做法。我很好奇是否有更好的方法:
在 npmjs.com 网站上查找您的软件包,并查看其推荐的安装方式。
如果它们建议使用 --save 安装(或者根本不需要任何 --save 选项),那么它属于 dependencies
如果它们建议使用 --save-dev(或 --dev-D)安装,那么它通常属于 devDependencies
例如: 例外情况:
我注意到这种方法并不总是可靠的。例如,resize-observer-polyfill 建议使用 --save-dev 进行安装,但我正在处理的项目在生产环境中使用它。不过,如果你正在使用 webpack,它可能会自动为你进行打包 : )。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接