重新安装 devDependecies 中列出的软件包后,npm 脚本无法正常工作

npm scripts not working after reinstalling packages listed in devDependecies

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

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

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

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

正如预期的那样,这会根据 package.jsondevDependencies 部分中列出的那些下载所需的节点包。

但是,在 运行 更新后 npm install 定义的一些脚本任务,例如:$ npm run watch 不再能够从被欺骗的项目中成功运行。

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

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

因此,我现在处于无法共享项目目录而不包含 node_modules 文件夹(及其内容)的位置。理想情况下,我想与其他开发人员共享样板代码,他们只需 cd 到项目目录和 运行 $ npm install 自己。

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

提前致谢。

我的猜测是您在 package.json 中(使用 ^~*)松散地指定了版本范围。您的原始目录包含过时的版本。当您 运行 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。除非您在 package.json 中使用 * 作为版本号,否则您在大多数情况下应该不会破坏更改。但是,包作者是人,有时他们会搞砸 semver。还有一些不遵循 semver 的 npm 包。这些包要么不应该使用,要么它们的版本号应该固定。

如果您 post package.jsondevDependencies 部分可能会有所帮助。