重新安装devDependecies

时间:2016-10-27 10:31:49

标签: npm npm-install package.json npm-scripts

我一直在使用npm脚本为前端开发人员开发构建系统,并且在scripts的{​​{1}}部分中定义了几个任务。这些包括典型的任务,如:缩小CSS,代码linting,生成文档,转换JavaScript等等。

通过CLI执行命令,定义的所有脚本任务都可以实现预期的结果,例如package.json$ npm run build$ npm run docs ......

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

  1. 复制项目目录。
  2. 从重复的项目目录中删除$ npm run watch文件夹。
  3. 通过node_modules在重复的项目目录中执行全新安装。
  4. 正如预期的那样,这将根据$ npm install的{​​{1}}部分中列出的节点包下载所需的节点包。

    但是,在运行了新的devDependencies之后,定义了一些脚本任务,例如:package.json不再能够从欺骗项目中成功运行。

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

    此外,通过CLI在原始项目目录和欺骗项目目录(即具有全新安装的目录)中运行npm install时,列出的软件包不同。

    所以,我现在处于这样一个位置:我不能在不包含$ npm run watch文件夹(及其内容)的情况下共享项目目录。理想情况下,我想与其他开发人员共享样板代码,他们只需$ npm list到项目目录并自己运行node_modules

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

    提前致谢。

1 个答案:

答案 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

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

大多数npm包使用SemVer。除非您在*中使用package.json作为版本号,否则您应该可以安全地在大多数情况下不做更改。然而,包装作者是人,有时他们会陷入困境。还有一些不遵循semver的npm包。不应使用这些软件包,也不应固定其版本号。

如果您发布devDependencies的{​​{1}}部分,可能会有所帮助。