0

我一直在使用 npm 脚本为前端开发人员开发一个构建系统,并且scriptspackage.json. 这些包括典型的任务,例如:缩小 css、代码 linting、生成文档、转译 JavaScript……等等。

定义的所有脚本任务都通过 CLI 执行命令来达到预期的结果,例如$ npm run build, $ npm run docs...$ npm run watch

为了测试在全新安装所需的节点包后可以成功复制构建系统,我这样做:

  1. 复制项目目录。
  2. node_modules从重复的项目目录中删除该文件夹。
  3. 通过在重复的项目目录中执行全新安装$ npm install

正如预期的那样,这会devDependencies根据package.json.

但是,在运行了npm install一些新的脚本任务后,定义了诸如:$ npm run watch不再从受骗项目中成功工作。

进一步调查显示,没有。重复项目目录的“node_modules”文件夹中列出的顶级包(即全新安装后的那个)比成功运行任务的原始项目目录少了大约 30 个。缺少的所有软件包似乎都是我安装的软件包所依赖的子依赖项。

此外,当$ npm list通过 CLI 运行时,在原始项目目录和复制的项目目录(即全新安装的目录)中列出的包不同。

所以,我现在处于一个位置,如果不包含node_modules文件夹(及其内容),我就无法共享项目目录。理想情况下,我想与其他开发人员共享样板代码,他们只需cd到项目目录并$ npm install自行运行。

我将不胜感激有关如何解决此问题的任何建议。这不是我以前遇到过的。

提前致谢。

4

1 回答 1

2

我的猜测是您在package.json(with ^, ~, or *) 中松散地指定了您的版本范围。您的原始目录包含过时的版本。当您npm install在新目录中运行时,会安装更高版本(且不兼容)的版本(具有不同的依赖项)。

要验证,请转到您的原始目录并运行npm outdated. 这将为您提供所有过时依赖项的列表,以及安装的当前版本、您的版本范围允许package.json的最新版本以及软件包的最新版本号。像这样:

$ npm outdated
Package                        Current  Wanted  Latest  Location
eslint                          1.10.3  1.10.3   3.9.1  postcss-import
eslint-config-i-am-meticulous    2.0.0   2.0.0   5.0.2  postcss-import
pkg-resolve                     0.1.14  0.1.14   0.2.2  postcss-import
postcss-scss                     0.1.9   0.1.9   0.4.0  postcss-import

如果任何版本号CurrentWanted版本号不同,新目录中的全新安装将导致安装不同的版本

大多数 npm 包使用SemVer。除非您在 中使用 a*作为版本号,否则package.json大多数情况下您应该不会破坏更改。但是,包作者是人,有时他们会弄乱 semver。还有一些不遵循 semver 的 npm 包。这些软件包要么不应该被使用,要么它们的版本号应该被固定。

如果您发布devDependencies您的package.json.

于 2016-11-08T13:55:44.287 回答