npm(Node Package Manager)是Node.js生态系统中的默认包管理器,它提供了一系列的命令行工具,使得开发者能够方便地进行包的管理操作。这些操作包括但不限于下载、安装、升级、删除包,以及发布和维护自己的包。
以下是npm的一些主要功能:
npm install
命令安装项目所需的包,并将其添加到项目的依赖中,减少重复劳动。package.json
文件中定义脚本,使用npm run
命令执行。npm不需要单独的安装,在安装Node.js的时候会相应的安装npm。
npm -v # 查看npm版本,若输出版本号,即为安装成功
# 10.5.1
初次运行npm时,可以使用npm init
命令进行初始化操作,它会引导填写一些基本信息(如版本号、描述等)
初始化项目后创建package.json
文件
package.json文件
package.json文件通常用来描述项目和软件包信息。
scripts
scripts
字段用于定义项目中的各种脚本命令。可以在其中指定一些常用的操作,比如启动项目、执行测试、构建等,并且可以通过命令行工具来执行这些脚本。
例如,假设想在每次提交代码前运行测试,可以创建一个名为precommit
的脚本:
{
"scripts": {
"prestart": "npm install",
"start": "node index.js"
}
}
在命令行使用npm run prestart
等同于执行npm install
每个script都是一个命令行指令,后面跟着要执行的具体命令。当开发者克隆一个仓库并在自己的机器上运行npm install
或yarn
安装依赖后,可以通过npm run <scriptName>
或yarn <scriptName>
来执行这些预设的任务。这样的自动化大大提高了开发效率,减少了重复劳动,并且确保所有开发者和CI/CD流水线都能以相同的方式执行相同的步骤。
dependencies和devDependencies
dependencies和devDependencies是项目配置文件中的两个重要部分,它们用于分别列出项目运行时和开发时所需的外部模块或库。
在package.json中明确指定这些依赖项,可以确保任何人在新的环境中克隆和设置项目时都能够获得正确的版本,并且能够重现构建过程。这对于团队协作和持续集成/持续部署(CI/CD)流程至关重要。
npm提供了许多有用的命令来帮助管理项目的依赖项和其他相关任务。下面是一些最常用的npm命令:
更多npm命令可参阅CLI 命令 | npm 中文网 (nodejs.cn)
在 npm 中,可以选择全局安装或本地安装包。这两种方式各有用途:
npm install -g
):全局安装的包对所有项目都可用。这意味着无论在哪里,都可以在命令行中访问这些包。这适用于那些不打算在单个项目中使用,而是希望在整个系统范围内使用的工具或命令行程序。例如,如果你经常需要使用某个代码格式化工具或构建脚本,全局安装可以让它在任何地方都可以使用。npm install
):本地安装的包仅限于当前项目的node_modules
目录。这意味着其他项目不能访问这些包,除非也为它们安装了同样的依赖项。这适用于那些项目直接依赖的库或工具。例如,如果你的项目需要一个特定版本的jQuery,你应该本地安装它,因为它只对你当前的项目有用。一般来说,建议尽可能使用本地安装,因为它允许精确控制每个项目的依赖关系,并且避免不同项目之间的冲突。全局安装主要用于那些你需要在多个项目间共享的工具或命令行实用程序。
npm版本管理和兼容性策略是确保项目顺利运行的关键部分。以下是一些建议:
版本号.次版本号.修订号
。当发布新功能时,增加次版本号;当修复 bug 时,增加修订号;当做出破坏性更改时,增加主版本号。这有助于开发者了解他们是否需要升级他们的代码以适应新版本。npm update
来更新依赖项到最新版本,以利用最新的改进和安全修复。但请小心重大更新,因为它们可能会引入不兼容的变化。通过遵循这些实践,可以最大限度地减少因依赖项更新而引起的问题,并确保项目稳定可靠。
package-lock.json文件:
package-lock.json
文件是npm在执行npm install
命令后自动生成的一个锁文件,其目的是确保在不同环境下能够一致地安装相同版本的依赖项。这个文件描述了项目所需的每个依赖的确切版本号以及解析后的实际下载地址。
在GitHub或其他代码托管服务上检查模块名称是否可用,确保该名称没有被其他npm包占用。
在开发目录中创建一个新的文件夹作为模块项目,在该文件夹内运行npm init
命令初始化package.json文件,它会引导填写一些基本信息(如版本号、描述等),或者使用npm init -y
命令快速初始化。
在项目目录中创建一个JavaScript文件,通常命名为index.js,在其中编写模块代码,并且确保它能作为一个Node.js模块正确导出功能或类。
添加必要的元数据,包括模块的名称、版本号、描述、作者、许可证等,如果需要,还可以添加 scripts
部分来自定义命令,例如启动脚本或测试脚本。
第一次发布需要先注册一个npm账户
# 注册账户
npm adduser
如果有npm账户则直接登录
# 登录账户
npm login
最后使用npm publish
命令将模块发布到npm仓库
对于每次更新,需要先递增版本号,然后再次运行npm publish
来更新已发布的模块版本。
总的来说,npm不仅是Node.js的核心组成部分,也是现代前端工程化的基石。掌握npm意味着掌握了JavaScript开发的未来趋势,它是每个前端工程师必备的基本功。随着Node.js及JavaScript技术的不断演进,相信npm将继续发挥其重要作用,引领着Web开发的新潮流。