【问题标题】:npm install by default tries to install globallynpm install 默认尝试全局安装
【发布时间】:2019-08-21 12:57:50
【问题描述】:

在文件夹上执行 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 中创建的。

谁能帮助解决问题以及如何解决?

【问题讨论】:

    标签: node.js npm npm-install


    【解决方案1】:

    当你进行 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 init 初始化了一个“npm 项目”,并将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 项目。

    还有一件事,express 不是“全局”安装的,您通过npm install express -g 进行“全局”安装(尽管对于 express 来说,全局安装它没有用处)。您的情况只是“安装在主目录中”的软件包。

    【讨论】:

      猜你喜欢
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多