ChatGPT解决这个技术问题 Extra ChatGPT

你是把 Babel 和 Webpack 放在 devDependencies 还是 Dependencies 里?

我是 npm 新手,并不真正了解依赖项与 devDependencies 应该包含哪些内容。我知道为了测试库,他们应该进入 dev,但是对于 babel 和 webpack 之类的东西呢?它们也应该在 dev 中吗,因为它们只用于将 es6 和 JSX 转换为 vanilla JS?我的理解是,当您部署到 heroku 时,它已经对必要的库进行了转编译,所以不需要在生产环境中托管它们?

  "dependencies": {
    "babel-core": "^6.7.7",
    "babel-eslint": "^6.0.4",
    "babel-loader": "^6.2.4",
    "babel-plugin-react-transform": "^2.0.2",
    "babel-plugin-transform-object-rest-spread": "^6.6.5",
    "babel-plugin-transform-react-display-name": "^6.5.0",
    "babel-polyfill": "^6.7.4",
    "babel-preset-es2015": "^6.6.0",
    "babel-preset-react": "^6.5.0",
    "bootstrap": "^3.3.7",
    "css-loader": "^0.23.1",
    "es6-promise": "^3.2.1",
    "eslint": "^2.9.0",
    "eslint-plugin-babel": "^3.2.0",
    "eslint-plugin-react": "^5.0.1",
    "express": "^4.13.4",
    "extract-text-webpack-plugin": "^1.0.1",
    "file-loader": "^0.9.0",
    "lodash": "^4.15.0",
    "react": "^15.0.2",
    "react-addons-css-transition-group": "^15.0.2",
    "react-dom": "^15.0.2",
    "react-redux": "^4.4.5",
    "react-transform-catch-errors": "^1.0.2",
    "react-transform-hmr": "^1.0.4",
    "redbox-react": "^1.2.3",
    "redux": "^3.5.2",
    "redux-form": "^6.1.0",
    "rimraf": "^2.5.2",
    "style-loader": "^0.13.1",
    "webpack-dev-middleware": "^1.6.1",
    "webpack-hot-middleware": "^2.10.0"
  },
  "devDependencies": {
    "babel-register": "^6.9.0",
    "chai": "^3.5.0",
    "mocha": "^2.5.3",
    "sinon": "^1.17.4",
    "webpack": "^1.13.2"
  }
stackoverflow.com/questions/18875674/… 。这会给你一些必要的清晰度!

T
Taysky

babelwebpack 包将进入 devDependencies 部分,因为这些包用于将您的代码转译和捆绑到 bundle.js & 中的 vanilla javascript 中等文件。

在生产中,您将从 bundle.js 构建/生成的代码中运行您的代码,不再需要这些依赖项。


在生产环境中,您的 build 或 deploy 文件夹将包含已由 babel 转换为 ES5 的内容。因此,您实际上并不需要它们来运行您的应用程序。
一个例外是 babel-polyfill,因为在运行时需要 polyfill:babeljs.io/docs/usage/polyfill
@HaoCS 我看过 Babel 的文档说要将 babel-polyfill 放在依赖项中,但我不明白为什么。运行构建后捆绑包不会包含它吗?我看不出它不能在 devDependencies 中。会喜欢更多的见解。
在回答 Harkirat 的问题(以及回答它的评论)时,有一些关于您如何部署的假设。当人们说“Babel 是一个开发依赖项”时,他们希望您将 Babel 编译的代码提交到 Git(或您使用的任何东西)中,然后将该编译后的代码部署到您的服务器。在那种情况下,Babel 是一个开发依赖项,因为它永远不会在服务器上运行。但是,如果您改为提交普通代码,并在您的服务器上运行 Babel,您可能不希望它作为开发依赖项,因为服务器需要它。
虽然这对 NodeJs 环境完全有意义,但对于前端项目,人们可以有不同的想法。事实是,对于前端项目,您不需要包,只需要捆绑文件。不管是 Webpack、Babel 还是 React。在我的项目中,我将构建生产包所需的所有内容存储在 dependencies 中,并将我在 dev 中使用的所有工具存储在 devDependencies 中。这本质上意味着 Webpack 以依赖关系结束,开玩笑的 - 在 devDependencies 中。
C
Chris Vincent

尽管基本上每个人都这么说,但我要提供一点理智......这真的很简单:

您的项目会npm install被另一个项目支持吗? aka 你在创作一个 npm 模块吗?它最终会出现在另一个项目package.json中吗?

不?

然后将所有内容放入 dependencies

是的?

依赖项:您希望项目的下游消费者和项目开发人员已安装的东西:

peerDependencies:下游用户需要确保他们已安装的东西

bundleDependencies:下游用户需要的东西,不需要单独安装,因为当你 npm publish 时,这些将与你的包“捆绑”。

optionalDependencies:拥有很好但没有的东西不会导致致命错误

devDependencies:仅在处理项目时使用的东西。

简而言之:模块不会神奇地以不同的方式安装。他们要么安装,要么不安装。


对于常规应用程序(不是 npm 库),将所有内容放入 dependencies 意味着您的开发工具将与您的应用程序一起部署在生产环境中。馊主意。
@jfroy,你能确认一下吗?像源链接。我记得我们的一位 js 开发人员提到,当 webpack 构建和打包 js 代码时,它会检查一个包是否被导入,然后决定是否应该打包它。但是,包 babel 不太可能被导入并在应用程序代码中使用,对吧?这种情况下,连babel都加到依赖里了,也不会被打包吧?谢谢
@JeffChen,看看 npm 文档中的定义:docs.npmjs.com/files/package.json#dependencies。他们特别警告不要将转译器放在依赖项中。 Webpack 和其他打包程序应用的 Tree Shaking 确实会删除生产构建中未使用的代码,从而删除任何错误分配的开发依赖项,但此答案中没有任何内容清楚地表明这是他们用来证明定义不明确的 package.json 的依据。
@jfroy 我们使用 docker 多阶段构建。因此,您的任何担忧都无关紧要。事实上,最终在生产中的唯一结果是输出 js/css/png/etc 包。真的。您为解决这种前端依赖关系的分离而付出的努力甚至不值得回报。
如果您部署到无服务器,则分离很重要,devDependencies 不会包含在 zip 中,而依赖项会包含。这意味着如果您将所有内容添加到依赖项中,您最终将很快达到 lambda 层大小
S
Shubham Laad

开发依赖仅用于开发服务器,这些是devDepedency:所有未在源代码中使用或导入的包都是devDependencies

"babel-cli": "^6.26.0",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.4",
"babel-preset-env": "^1.6.1",
"babel-preset-react": "^6.24.1",
"clean-webpack-plugin": "^0.1.19",
"copy-webpack-plugin": "^4.5.1",
"css-loader": "^0.28.11",
"file-loader": "^1.1.11",
"html-webpack-plugin": "^3.2.0",
"mini-css-extract-plugin": "^0.4.0",
"node-sass": "^4.8.3",
"optimize-css-assets-webpack-plugin": "^4.0.0",
"prop-types": "^15.6.1",
"sass-loader": "^7.0.1",
"style-loader": "^0.21.0",
"uglifyjs-webpack-plugin": "^1.2.5",
"webpack": "^4.6.0",
"webpack-cli": "^3.1.1",
"webpack-dev-server": "^3.1.9"

这些是构建应用程序所必需的。这完全取决于您构建应用程序的位置。