nodejs 本地安装VS全局安装 生产依赖VS开发依赖

本文解析了npm的基本概念,包括全局安装与本地安装的区别、开发依赖与生产依赖的应用场景,以及如何根据项目需求选择合适的安装方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

npm(你怕吗)

npm(Node Package Manager)是 JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具。通过 npm 可以安装、共享、分发代码,管理项目依赖关系。(与其有同样功能的另一个包管理工具yarn,速度用体验比旧版本的npm好,但npm最近的新版本也做出很大努力,与yarn速度和体验差距越来越小,有兴趣可以了解下)。

npm这几年可以说是前端猿日常离不开的工具了,刚开始学习使用node、npm来进行前端项目构建的时候,有很多概念需要理解,各种命令行、各种新js语法、各种环境依赖...就问你怕吗?:

讲真,刚开学时我怕。废话不多扯,现在我们进入主题,聊聊npm 全局安装与本地安装、开发依赖和生产依赖,先抛几个常见疑惑:

  1. 什么是全局安装、什么是本地安装(或叫局部安装,下文统一叫本地安装) ?
  2. 为什么要全局安装?为什么又要本地安装?全局安装和本地安装有什么区别?
  3. 什么叫开发依赖、生产依赖?什么又是开发环境、生产环境?

全局安装与本地安装

一、全局安装:

npm install <pageName> -g//(这里-g是-global的简写)

通过上面的命令行(带-g修饰符)安装某个包,就叫全局安装。通常全局包安装在node目录下的node_modules文件夹。可以通过执行下面几条命令查看node、npm的安装目录和全局包的安装目录。

which node   // 查看node的安装目录
which npm   // 查看npm的安装目录
npm root -g // 查看全局包的安装目录
npm list -g --depth 0 //查看全局安装过的包

二、本地安装:

npm install <pageName> (后面可以加几种修饰符,主要有两种--save-dev和--save)

通过上面的命令行安装某个包,就叫本地安装。包安装在你当前项目文件夹下的node_modules文件夹中。

三、全局安装的作用:

全局安装的包可提供直接执行的命令(例:gulp -h可以查看gulp定义了什么命令)。 比如gulp全局安装后,可以在命令行上直接执行gulp -v、gulp -h等(原理:全局安装的gulp会将其package.json中的bin命令注入到了全局环境,使得你可以全局执行:gulp xxx命令,这另一个话题了,不深入)。倘若只在本地安装了gulp,未在全局安装gulp,直接执行这些命令会报错。你想要执行相应的命令则可能需要例如:node ./node_modules/gulp/bin/gulp.js -v(查看版本) 这样用一大串命令来执行。因此全局安装就发挥到他的好处了,一个gulp -v就搞定

当然,不是每个包都必须要全局安装的,一般在项目中需要用到该包定义的命令才需要全局安装。比如gulp <taskName>执行gulp任务...等,所以是否需要全局安装取决于我们如何使用这个包。全局安装的就像全局变量有点粗糙,但在某些情况下也是必要的,全局包很重要,但如果不需要,最好避免使用。

四、可以全局安装,那么直接全局安装到处使用就行了,干嘛还需要本地安装?

  1. 如果只是全局安装了而没本地安装,就得require('<pagePath>') 例:引入一个全局的包可能就是requirt('/usr/local/....')通过全局包的路径引入,这样显然十分的不灵活。如果安装了本地包,那么就可以直接require('<pageName>')引入使用。
  2. 一个包通常会在不同的项目上会重复用到,如果只全局安装,那么当某个项目需要该包更新版本时,更新后可能就会影响到其他同样引用该包的项目,因此本地安装可以更灵活地在不同的项目使用不同版本的包,并避免全局包污染的问题。

一个经验法则:要用到该包的命令执行任务的就需要全局安装,要通过require引入使用的就需要本地安装( 但实际开发过程中,我们也不怎么需要考虑某个包是全局安装还是本地安装,因为这一点在该包的官网上一般会明确指出,以上是为了理解全局安装和本地安装)。

开发依赖和生产依赖

顺着上面讲到的本地安装,本地安装有两种主要的安装方式:

  1. 保存到开发依赖(devDependencies): npm install <pageName> --save-dev
  2. 保存到生产依赖(dependencies): npm install <pageName> --save

"开发依赖"顾名思义在开发环境中用到的依赖,"生产依赖"在生产环境中用到的依赖。那么这里又延伸出个问题什么是开发环境、什么是生产环境?

一、开发环境和生产环境

【开发环境】:指的是你的项目尚且在编码阶段时的环境。你在代码可能还有各种console.log()、注释、格式化等。
【生产环境】:指的是你的项目已经完成编码,并发布上线可供用户浏览的阶段时的环境。代码可能经过了压缩、优化等处理。

这些概念其实并没有一个很明确的定义,接下来我们举例个场景,将"开发环境"、"生产环境"和上面的"开发依赖"、"生产依赖"联系起来就会比较容易理解的了。假如我们在开发过程中使用jQuery。在以往,可能就是把jQuery这个插件下载的本地,再通<script>引入html中。但这有个不方便的地方,我们每次进行一个项目的时候就得手动复制这个jQuery文件到我们的项目中,如果想要换个版本又得官网上下载、随着项目越来越多。用到的插件、库也随之越繁杂...这样会造成自家用的插件管理繁琐的问题。因此就出现了npm(包管理工具)你需要用到什么,直接通过一条命令行就可以将想要的插件下载下来,并直接引入到项目中,目前几乎所有的js插件都能在npm上直接下载。

二、生产依赖

回到环境和依赖话题,我们下载的jQuery,在开发时参与源码编写,在发布上线的生产环境中也是需要它的。不仅在开发环境编写代码时要依赖它、线上环境也要依赖它,因此将它归类为"生产依赖"。安装时执行npm install jquery --save,它就会被记录在package.json的dependencies。当进行代码打包时,会将这里的jQuery打包入我们的项目代码中。

三、开发依赖

接着,假如我们用gulp对html进行压缩,我们通常会用到一个插件gulp-htmlmin。我们只希望它把html压缩完就ok了,并不希望它融入我们的项目代码中,即只存在于开发环境,因此把他归类为"开发依赖"。安装时执行npm install gulp-htmlmin --save-dev它就会被记录在package.json的devependencies下,当进行代码打包时,不会将这里的gulp-htmlmin插件源码打包入我们的项目代码中

devDependencies只会在开发环境下使用,生产环境不会被打入包内;而dependencies不仅在开发环境中要使用,生产环境也需要使用到。根据以上规则,我们就很容易区分哪些插件是用--save-dev模式安装,哪些用--save模式安装。

 

<think>好的,我现在需要回答用户关于如何在Node.js环境下使用npm或yarn安装依赖包的问题。首先,我得回忆一下自己之前学过的相关知识,同时结合提供的引用内容来确保信息的准确性。 用户的问题很明确,他们想知道具体的安装步骤。根据引用中的信息,Node.js依赖npm或Yarn来管理包,而安装命令包括npm install和npm i。同时,引用还提到了在mac上安装Yarn需要使用sudo权限,否则会有权限错误,这点需要注意。另外,用户提供的引用中还提到了设置npm全局路径和缓存路径,这可能是在特定环境下配置npm时需要的内容,但用户的问题主要是关于安装依赖包,这部分可能属于进阶配置,暂时不需要深入,除非用户提到相关问题。 首先,我应该分步骤说明使用npm和Yarn的基本安装方法。对于npm,基本命令是npm install <包名>,或者简写为npm i <包名>。如果是安装生产依赖,默认就是如此,而开发依赖则需要加上-D选项。全局安装则是-g选项,但引用中提到在mac上需要sudo,这点需要特别提醒,避免用户遇到权限问题。 然后,Yarn的安装命令类似,引用中提到使用yarn add <包名>,开发依赖则是-D,全局安装用global。需要注意的是,Yarn本身需要先安装,用户可能已经按照引用中的步骤安装好了,但可能需要确认这一点,或者在回答中提到如何安装Yarn,比如通过npm install -g yarn,但根据引用4,在mac上需要sudo,所以这点要强调。 接下来,用户可能需要知道如何区分生产依赖开发依赖,所以需要解释这两个概念,并举例子,比如express作为生产依赖,eslint作为开发依赖。 然后,安装全部依赖通常是在项目初始化时,使用npm install或yarn install,这时候会根据package.json安装所有依赖项。这点需要说明,可能用户已经有了package.json,或者需要初始化,但问题可能集中在安装特定包,所以可以简单提及。 注意事项部分,权限问题在mac/linux下需要注意,尤其是全局安装时,可能需要sudo。另外,镜像源的问题可能影响安装速度,但用户如果没有提到,可能不需要深入,但可以作为优化建议提到,比如使用淘宝镜像或者nrm工具,但根据引用中的信息,用户可能没有提到,所以可能作为附加内容。 然后,引用中的例子比如npm install uniq,可以作为示例,这样用户更容易理解。同时,引用2中的配置设置可能和用户的问题无关,但用户的问题是关于安装依赖包,所以可以忽略这部分,除非用户问及配置。 总结下来,回答的结构应该是: 1. 使用npm安装依赖 - 基本命令 - 生产依赖开发依赖 - 全局安装 - 示例 2. 使用Yarn安装依赖 - 基本命令 - 生产开发依赖 - 全局安装 - 示例 3. 安装全部依赖 - npm install 和 yarn install 4. 注意事项 - 权限问题 - 镜像源 同时,需要引用对应的引用内容,比如引用3提到的npm install和npm i等效,引用4中的sudo权限问题,引用1中提到的工具依赖关系。 需要确保步骤清晰,语言简洁,符合用户要求的用中文回答,行内公式正确使用$...$,但在这个问题中可能用不到数学公式,所以可以忽略。但需要遵循系统级指令的其他要求,比如生成相关问题,放在最后。 最后,检查是否有遗漏,比如是否需要初始化package.json,但用户的问题可能假设已经有一个项目存在,所以可能不需要详细说明npm init的步骤,除非用户提到,但根据问题,用户可能已经知道这些基础,所以可以略过。</think>在Node.js环境下使用npm或yarn安装依赖包的具体步骤如下: --- ### 一、使用npm安装依赖 1. **基本命令** 安装单个包到项目依赖(默认保存到`dependencies`): ```bash npm install <包名> # 简写 npm i <包名> ``` 示例:安装`lodash`工具库: ```bash npm install lodash ``` 2. **区分生产依赖开发依赖** - **生产依赖**(运行时必需):默认直接安装。 - **开发依赖**(仅开发阶段需要):通过`-D`或`--save-dev`标志安装,保存到`devDependencies`: ```bash npm install <包名> -D ``` 示例:安装代码检查工具`eslint`作为开发依赖: ```bash npm install eslint -D ``` 3. **全局安装** 添加`-g`标志可将工具类包(如`yarn`、`nodemon`)安装到系统全局: ```bash npm install <包名> -g ``` *注意:在macOS/Linux系统中可能需要`sudo`权限[^4]。* --- ### 二、使用yarn安装依赖 1. **基本命令** 安装单个包到项目依赖: ```bash yarn add <包名> ``` 2. **区分依赖类型** - 开发依赖:添加`-D`标志: ```bash yarn add <包名> -D ``` 3. **全局安装** 使用`global`关键字: ```bash yarn global add <包名> ``` --- ### 三、安装项目全部依赖 若已有`package.json`文件,运行以下命令自动安装所有依赖: - **npm**: ```bash npm install ``` - **yarn**: ```bash yarn install ``` --- ### 四、注意事项 1. **权限问题** 在macOS/Linux系统中,全局安装时若报错`EACCES`,需使用`sudo`提升权限[^4]: ```bash sudo npm install <包名> -g ``` 2. **镜像源加速** 若下载速度慢,可切换为国内镜像(如淘宝源): ```bash npm config set registry https://registry.npmmirror.com ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值