需要有关npm安装到SSD驱动器的建议

问题描述 投票:2回答:1

问题如下:我每周制作4-5个小网站,并使用工具(webpack,ejs等)。因此,我一直在努力的每个网站,我在当地做了npm install。我的旧机器配备硬盘驱动器是可以的,但现在我只买了一台带SSD的新笔记本电脑(并且没有机会返回硬盘)。关键是,我害怕每周做4次npm install太快杀死我的SSD驱动器。有没有合理的方法来优化这个?也许我可以在全球范围内安装devDependencies或者在某处安装它并链接到它们,并在本地安装仅prod dependencies

这是我的平均package.json deps:

"dependencies": {
  "siema": "^1.5.1"
},
"devDependencies": {
  "autoprefixer": "^9.1.5",
  "copy-webpack-plugin": "^4.5.2",
  "ejs-compiled-loader": "^1.1.0",
  "group-css-media-queries-loader": "^2.0.2",
  "postcss-loader": "^3.0.0",
  "babel-core": "6.26.3",
  "babel-loader": "7.1.5",
  "babel-polyfill": "^6.0.16",
  "babel-preset-env": "1.7.0",
  "babel-preset-stage-0": "^6.0.15",
  "clean-webpack-plugin": "0.1.19",
  "cross-env": "5.2.0",
  "css-loader": "1.0.0",
  "file-loader": "1.1.11",
  "html-webpack-plugin": "3.2.0",
  "jimp": "^0.6.0",
  "mini-css-extract-plugin": "^0.4.3",
  "node-sass": "4.9.2",
  "optimize-css-assets-webpack-plugin": "^5.0.1",
  "puppeteer": "^1.11.0",
  "raw-loader": "^1.0.0",
  "sass-loader": "7.0.3",
  "style-loader": "0.21.0",
  "uglifyjs-webpack-plugin": "^2.0.1",
  "url-loader": "1.0.1",
  "webpack": "4.16.3",
  "webpack-cli": "3.1.0",
  "webpack-dev-server": "^3.1.10",
  "webpack-merge": "4.1.3"
}

提前致谢。

更新:可能已经解决了。

参考this thread,我已经将我的devdeps安装在靠近root的单独文件夹中,而在项目的package.json我已经将devdeps链接如下:

"devDependencies": {
  "autoprefixer": "file:c:/_npmg/node_modules/autoprefixer",
  "copy-webpack-plugin": "file:c:/_npmg/node_modules/copy-webpack-plugin",
  "ejs-compiled-loader": "file:c:/_npmg/node_modules/ejs-compiled-loader",
  /* ... */
}

结果是这样的:

node_modules: size and structure

......一切都运转得很好。

现在我想知道这是否是我的案例最合适的解决方案(考虑到它只是本地开发需要,我不使用docker或其他东西)或者是否有更优化的方法。

node.js npm
1个回答
1
投票

更新:

我下面的原始解决方案是hacky,并且有一些缺点。另一方面,正如@sachin Gupta所建议的那样,pnpm似乎是解决问题的直接解决方案。我还没有尝试过,但如果文档没有说谎,就像following the installation guide一样简单,然后只需使用命令$ pnpm而不是$ npm来安装项目的依赖项。

在根文件夹中存储公共依赖项

解决问题的一种方法是让所有项目文件夹成为另一个-let的子文件夹,称之为root-,后者又有package.jsonnode_modules。这个root项目具有项目共享的所有常见开发依赖项:webpack,babel,node-sass等。

Folder structure example

. root/
+-- node_modules/
+-- package.json
|   +-- web-project-1/
|     +-- package.json
|     +-- src/
|       +-- main.js
|       +-- index.html
|     +-- dist/
|       +-- index.html
|   +-- web-project-1/
|     +-- package.json
|     +-- src/
|       +-- main.js
|       +-- index.html
|     +-- dist/
|       +-- index.html

这只是一个例子。唯一重要的部分是dev依赖项位于项目父项的node_modules文件夹中。

The good parts

  1. 子文件夹中的任何importrequire都将使用root的节点模块。因此,您的应用程序代码将使用父级的node_modules,而无需进一步配置。当你在任何文件夹树中执行require时,这是node.js的默认行为:如果它在工作目录中找不到node_modules,它总是在父目录中查找node_modules,直到根文件夹。
  2. 使用node_modules二进制文件的子代中的任何npm脚本也将使用它们。那很整齐。因此,如果在任何子文件夹中你有一个webpack作为package.json中定义的npm脚本的项目,你可以从命令行调用它:npm run webpack而不需要在子文件夹中安装node_modules

所以,在这个例子中,qazxsw poi的qazxsw poi有一个qazxsw poi依赖,你可以设置root脚本,如:

node_modules

当你在终端中运行tslint时,web-project-1/package.json"scripts": { "lint": "tslint --project . --fix" }, tslint二进制文件将用于执行该命令。

每个其他构建步骤开发依赖项都会发生同样的情况,例如npm run lintrootnode_modules等。

The bad parts

不好的一面是,如果你从他们的webpack gulp任何一个孩子,那个node-sass中列出的依赖关系也会安装在孩子们身上,即使他们已经存在于父母身上。如果你想在他们的npm install中声明孩子们的dev依赖关系,这使得这种方法非常讨厌:你应该在每次执行package.json时手动删除孩子们中的重复deps。

但是,由于您只提供package.json文件夹,因此您不需要在其package.json中列出每个项目的dev依赖项。如果你需要与另一个开发人员合作,你可以将npm installdist传递给他们,这样他们就可以获得dev依赖关系了。

这种方法的优势在于您不需要在新项目的每个package.json中手动设置符号链接。

Key points

  • 父项必须具有项目的所有dev依赖项。
  • 你不能在子root上列出dev依赖项,除非你愿意在每次package-json后从package-json手动删除它们,这是我认为太麻烦了。
  • 如果您在一个特定项目中需要另一个版本的依赖项,您实际上可以在package.json中列出它:它将安装在子项的node_modules中。
© www.soinside.com 2019 - 2024. All rights reserved.