重新安装 devDependecies 中列出的软件包后,npm 脚本无法正常工作
npm scripts not working after reinstalling packages listed in devDependecies
我一直在使用 npm 脚本为前端开发人员开发一个构建系统,并且在 package.json
的 scripts
部分中定义了几个任务。这些包括典型的任务,例如:缩小 css、代码 linting、生成文档、转译 JavaScript…等等
所有定义的脚本任务通过CLI执行命令达到预期结果,例如$ npm run build
、$ npm run docs
、$ npm run watch
...
为了测试在全新安装所需节点包后构建系统是否可以成功重现,我这样做了:
- 复制项目目录。
- 从重复的项目目录中删除
node_modules
文件夹。
- 通过
$ npm install
在复制的项目目录中执行全新安装。
正如预期的那样,这会根据 package.json
的 devDependencies
部分中列出的那些下载所需的节点包。
但是,在 运行 更新后 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
如果 Current
和 Wanted
版本号中的任何一个不同,在您的新目录中进行全新安装 将导致安装不同的版本 。
大多数 npm 包使用 SemVer。除非您在 package.json
中使用 *
作为版本号,否则您在大多数情况下应该不会破坏更改。但是,包作者是人,有时他们会搞砸 semver。还有一些不遵循 semver 的 npm 包。这些包要么不应该使用,要么它们的版本号应该固定。
如果您 post package.json
的 devDependencies
部分可能会有所帮助。
我一直在使用 npm 脚本为前端开发人员开发一个构建系统,并且在 package.json
的 scripts
部分中定义了几个任务。这些包括典型的任务,例如:缩小 css、代码 linting、生成文档、转译 JavaScript…等等
所有定义的脚本任务通过CLI执行命令达到预期结果,例如$ npm run build
、$ npm run docs
、$ npm run watch
...
为了测试在全新安装所需节点包后构建系统是否可以成功重现,我这样做了:
- 复制项目目录。
- 从重复的项目目录中删除
node_modules
文件夹。 - 通过
$ npm install
在复制的项目目录中执行全新安装。
正如预期的那样,这会根据 package.json
的 devDependencies
部分中列出的那些下载所需的节点包。
但是,在 运行 更新后 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
如果 Current
和 Wanted
版本号中的任何一个不同,在您的新目录中进行全新安装 将导致安装不同的版本 。
大多数 npm 包使用 SemVer。除非您在 package.json
中使用 *
作为版本号,否则您在大多数情况下应该不会破坏更改。但是,包作者是人,有时他们会搞砸 semver。还有一些不遵循 semver 的 npm 包。这些包要么不应该使用,要么它们的版本号应该固定。
如果您 post package.json
的 devDependencies
部分可能会有所帮助。