node.js - npm install 默认尝试全局安装
问题描述
在文件夹上执行 npm install 时,安装包c:\Users\<user>\node-modules
而不是.\<project folder>\node-modules
我尝试更新 npm config save=false 但这并没有解决问题
PS C:\Users\danielk\Documents\udemy_nodejs\FirstExpressApp> npm install express
npm WARN danielk No description
npm WARN danielk No repository field.
npm WARN danielk No license field.
+ express@4.17.1
updated 1 package and audited 126 packages in 2.004s
found 0 vulnerabilities
PS C:\Users\danielk\Documents\udemy_nodejs\FirstExpressApp> dir
Directory: C:\Users\danielk\Documents\udemy_nodejs\FirstExpressApp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 21/08/2019 7:54 AM 27 app.js
在项目文件夹中执行 npm install express 时,我希望在项目文件夹中创建 node-modules 子文件夹,并将 express 模块安装在 node-modules 子文件夹中。但是它是在 C:\Users\danilk\node-modules 中创建的。
任何人都可以帮助解决什么问题以及如何解决这个问题?
解决方案
当您执行 npm install 时,npm 实际上会将包安装到您当前所在的“npm 项目”中。请参见以下示例:
eric_@Eric-Dev-Laptop MINGW64 ~/Desktop/mixed/stackoverflow
$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
package name: (stackoverflow)
[...Truncated...]
Is this OK? (yes)
eric_@Eric-Dev-Laptop MINGW64 ~/Desktop/mixed/stackoverflow
$ mkdir child
eric_@Eric-Dev-Laptop MINGW64 ~/Desktop/mixed/stackoverflow
$ cd child/
eric_@Eric-Dev-Laptop MINGW64 ~/Desktop/mixed/stackoverflow/child
$ npm install express
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN stackoverflow@1.0.0 No description
npm WARN stackoverflow@1.0.0 No repository field.
+ express@4.17.1
added 50 packages from 37 contributors and audited 126 packages in 3.021s
found 0 vulnerabilities
eric_@Eric-Dev-Laptop MINGW64 ~/Desktop/mixed/stackoverflow/child
$ ls
eric_@Eric-Dev-Laptop MINGW64 ~/Desktop/mixed/stackoverflow/child
$ ls ..
child/ node_modules/ package.json package-lock.json
eric_@Eric-Dev-Laptop MINGW64 ~/Desktop/mixed/stackoverflow/child
$ ls ../node_modules/
accepts/ escape-html/ mime/ safer-buffer/
array-flatten/ etag/ mime-db/ send/
body-parser/ express/ mime-types/ serve-static/
bytes/ finalhandler/ ms/ setprototypeof/
content-disposition/ forwarded/ negotiator/ statuses/
content-type/ fresh/ on-finished/ toidentifier/
cookie/ http-errors/ parseurl/ type-is/
cookie-signature/ iconv-lite/ path-to-regexp/ unpipe/
debug/ inherits/ proxy-addr/ utils-merge/
depd/ ipaddr.js/ qs/ vary/
destroy/ media-typer/ range-parser/
ee-first/ merge-descriptors/ raw-body/
encodeurl/ methods/ safe-buffer/
发生的事情是,我创建了一个stackoverflow
文件夹,在那里用 , 初始化了一个“npm 项目” npm init
,然后cd
进入child
文件夹。当我在npm install express
里面做的时候,express
模块会无意中安装到stackoverflow/node_module
. 这样当您制作程序时,例如 myprogram,甚至当您在其中的某个子文件夹中(例如myprogram/lib/
)并执行npm install
时,模块仍将安装到 myprogram。
将此与您的情况进行比较,这可能是因为您的 C:\Users\danielk\ 已经是一个 npm 项目,所以当您在 C:\Users\danielk\Documents\udemy_nodejs\FirstExpressApp 中时,npm 认为您在 C 中: \Users\danielk\ 项目,从而将express
模块保存在那里。
至于为什么 C:\Users\danielk\ 变成了一个 npm 项目,是你npm init
之前在那里手动做的,还是你在那里执行了你的第一个npm install
,然后 C:\Users\danielk\node_modules 被创建,标记为一个 npm 项目。
还有一件事,快递不是“全球”安装的,你是“全球”安装的npm install express -g
(尽管对于快递来说,全球安装它没有用处)。您的情况只是“安装在主目录中”的软件包。
推荐阅读
- javascript - 使用 Promises 发出连续的 got.js 请求
- android - 如何使用改造在发布请求的拦截器中附加 api 密钥主体
- mysql - 有没有办法从数据库中选择多个字段?
- javascript - Tui Calendar Ajax
- java - 从远程应用程序查找 WebLogic 12c EJB3 bean 时出现问题
- netsuite - 如何在 NS 保存的搜索结果中仅显示首选供应商定价
- flutter - 如何在 Flutter 中创建的应用程序中隐藏 AppBar
- r - 如何在两列范围上运行 for 循环(或其他方法)
- java - 在其他类中创建 JLabel 并实现到主类不出现
- wxwidgets - wxWIdgets 编译/运行问题