我一直在使用npm脚本为前端开发人员开发构建系统,并且在scripts
的{{1}}部分中定义了几个任务。这些包括典型的任务,如:缩小CSS,代码linting,生成文档,转换JavaScript等等。
通过CLI执行命令,定义的所有脚本任务都可以实现预期的结果,例如package.json
,$ npm run build
,$ npm run docs
......
为了测试在全新安装所需节点包后可以成功复制构建系统,我这样做:
$ npm run watch
文件夹。node_modules
在重复的项目目录中执行全新安装。正如预期的那样,这将根据$ npm install
的{{1}}部分中列出的节点包下载所需的节点包。
但是,在运行了新的devDependencies
之后,定义了一些脚本任务,例如:package.json
不再能够从欺骗项目中成功运行。
进一步调查显示,没有。重复项目目录的“node_modules”文件夹中列出的顶级软件包(即全新安装后的软件包)大约比成功运行任务的原始项目目录少30个。缺少的软件包似乎都是我所安装的软件包所依赖的子缺陷。
此外,通过CLI在原始项目目录和欺骗项目目录(即具有全新安装的目录)中运行npm install
时,列出的软件包不同。
所以,我现在处于这样一个位置:我不能在不包含$ npm run watch
文件夹(及其内容)的情况下共享项目目录。理想情况下,我想与其他开发人员共享样板代码,他们只需$ npm list
到项目目录并自己运行node_modules
。
我很感激有关如何解决此问题的任何建议。这不是我以前遇到的事情。
提前致谢。
答案 0 :(得分:2)
我的猜测是,您在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的npm包。不应使用这些软件包,也不应固定其版本号。
如果您发布devDependencies
的{{1}}部分,可能会有所帮助。