npm安装packagename --save-dev未更新package.json文件

61

运行 npm install modulename --save-dev 命令后,package.json 文件为何没有更新?是否存在简单或微妙的原因?该命令应当在项目根目录下执行。尽管命令成功执行,新模块也按预期出现在 node_modules 目录中,但我的 npm 版本是 v 1.4.28。希望得到帮助。

我当前的 package.json 文件如下:

{
    "name": "FooWeb",
    "version": "1.0.0",
    "description": "Foo Web",
    "devDependencies": {
        "gulp": "3.8.11",
        "gulp-jshint": "1.9.2",
        "gulp-concat": "2.5.2",
        "gulp-sass": "1.3.3",
        "gulp-sourcemaps": "1.4.0",
        "gulp-watch": "4.1.1"
    }
}

我在安装一个没有存储库字段或README的包时会收到警告,但我认为这与此无关。


你检查了 package.json 的权限吗? - Aaron
@Aaron,package.json 权限没问题。 - Brian Muenzenmeyer
1
不知道 npm ls ,很好用!在我的情况下,它在树中为模块输出一个绿色的多余标签,然后显示 ERR! 多余: modulename@x.x.x. [path] 错误。我也会继续沿着这条路进行故障排除。 - Brian Muenzenmeyer
1
“--save” 对我有用 (https://dev59.com/4VoU5IYBdhLWcg3wTVoe#37603531) - Ryan
请尝试使用命令提示符而不是 VS Code 终端。 - Savannah Madison
21个回答

72

我也遇到过这个问题,它让我疯掉了。

最终解决方法是运行 npm init。这会向我的 package.json 中添加一堆东西,但之后 --save-dev 就按预期工作了。即使我删除了 npm init 添加的所有新内容,--save-dev 仍然可以正常工作。


没错,在我的Ubuntu 14.04上运行良好。谢谢你。 - Mattijs
1
也适用于我。甚至没有添加任何内容到我的现有 package.json 文件中。 - Ben
4
谷歌搜索把我带到了这里... 我尝试安装包,命令如下:npm i -s <package> ... 但是在 package.json 文件中的 "dependencies" 字段没有被更新... 原来是我打错字了 :) ... -s 应该改成大写的 -S - Roman Grinyov
我曾经遇到过这个问题,后来发现是因为我在服务器上工作。我把项目移到本地后,现在一切都正常了。 - Xue Fang

17

如果你已经打开了package.json并且在没有保存更改的情况下进行修改,则可能会在VSCode(和其他编辑器)中发生此问题。

npm正在磁盘上更新文件,但IDE没有自动重新加载它以避免冲突。

因此解决方法就是关闭并重新打开package.json


(所以在这种情况下,“save-dev”是一个误导性的线索) - Simon_Weaver
(注意:在VSCode和VS中,“全部保存”快捷键不同) - Simon_Weaver
谢谢,这解决了我的问题。 - djangofan
1
谢谢。我尝试了所有的方法,但似乎我的情况有些特殊。谢谢。 - Andrew Shaban

14

我在那里加了 -g 标志,当我把它删除后,它就如预期地工作了...


也对我有用。但是为什么呢?如果我想要全局添加一个包怎么办? - Ahmad Habib

6

导航到JSON文件 -> 右键点击属性 -> 移除 "只读" 标志。


4
我最近遇到了这个问题,并发现由于某种原因,即使文件没有被打开,Atom也会阻止该文件更新。
我关闭了编辑器,重新运行了npm install,然后再次打开编辑器,一切都正常无误。

3

Mustafah ELBanna的回答对我很有帮助,但我想为像我这样的新手扩展他的回答。如果我遗漏了重要的内容,请纠正我。

如果您删除-g标志,则该模块不会全局安装在您的计算机上,而只会在项目中本地安装。如果您还希望将其全局安装,请再次执行相同的命令,但现在使用-g代替--save-dev,像这样:

npm install --save-dev [packagename]

npm install -g [packagename]

我觉得在一行中调用-g--save可能会出现问题。

但是,再次声明,我是新手,感谢任何想要改进/纠正我的回答的人。


2

我也遇到了同样的问题,因为nodemon已经全局安装了。

首先需要卸载全局安装的nodemon

npm uninstall -g nodemon

然后将其作为开发依赖项本地安装

npm install --save-dev nodemon

此时应该更新package.json文件。有时您的编辑器可能会阻止文件更新,所以如果没有更新,请确保重新启动它。


1

如果您没有从package.json目录运行命令,就会发生这种情况。

例如,如果您放置在文件夹Project而不是Project\ClientApp中,就会发生这种情况。

如果发生这种情况,您将注意到只有在错误的位置得到package-lock.json


1
我试图使用 "npm install --save grunt-sass" 安装gruntjs,但是package.json不会更新。
我按照上述步骤做了一切,但没有成功。有趣的是,如果我尝试添加一个包,比如 "underscore (npm install --save underscore)",那么son就会更新。我不确定这是否是nam本身的问题。我以超级用户身份安装了它。

1

我尝试了上面回答中提到的所有命令,但只有安装npm-upgrade包才成功。

npm i -g npm-upgrade 然后运行 npm-upgrade


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接