NPM是node.js的包管理器,类似python中的pip,本文带您快速学会npm的使用。
什么是NPM
- 它是Node的包管理器。类似python中的pip
- 需事先安装Node.js,需要Node的环境
- 可以方便安装模块/包到系统中
- 基于Javascript类
- 方便开发者分享/重用代码
本文内容涵盖:
- 安装、删除、更新或列出包
- package.json说明
- 本地/全局包
- 依赖/开发依赖
- npm命令及快捷键
- 版本控制
- npm脚本
安装及介绍
支持各个平台安装
npm模块的存储库
新建一个文件夹比如命名为npmapp,然后以vscode打开。
npm -v
npm –version
查看npm版本,上面两个命令是一样的,一般都提供一长一短两个命令。
npm
npm help
不带参数或跟help,将列出npm的用法
package.json文件
它可能是npm javascript中最重要的文件。
- 列出应用程序的清单,包括名称版本作者等
- 列出依赖项
- 确认版本是否匹配,是否需要升级
- 可以在这个json文件中创建npm脚本
- 可以手动创建,但使用 npm init可以简单搞定
我们来创建一下,在npmapp目录下,输入
npm init
回答一系列问题即可完成。当然可以保持默认。这样就生成了package.json文件
我们可以输入 npm init -y 或 npm init –yes
接受所有的答案,而无需逐个回答。
我们单独设置某些配置覆盖默认值,用npm config set 命令,
也可以省略config 直接是 npm set命令。
npm config set init-author-name “kelemi”
npm set init-license ”MIT”
npm init -y
我们也可以查看设置默认值,npm config get或 npm get即可。
npm get init-author-name
npm config get init-author-name
我们也可以删除前面的自定义设置
npm config delete init-author-name
npm config delete init-license
再删除package.json文件,再执行
npm init -y
我们来安装一个有用的工具包lodash,该包有排序数组等实用功能。
npm install lodash –save
加上 –save 表示会写到package.json中作为依赖项,不加save的话只安装不写入到package.json中。
这条命令执行之后,我们看到在当前文件夹下添加了一个node_modules文件夹,该文件夹包括losash包。另一个在package.json添加了一条依赖项。
我们来使用lodash:
先添加index.js文件,这是默认的入口文件。在其中引入lodash
const _ = require(‘lodash’);
下划线 _ 是约定的lodash命名,如果我们要使用npm的包,就需要require引入。
测试代码如下:
const _ = require('lodash')
const numbers = [33,46,76,44,32,3]
_.each(numbers,function(number,i){
console.log(number)
})
保存index.js,然后在控制台执行:
node index
就会依次输出数组中的各个数字。
以上的程序执行的内容不重要,重要的是要理解npm导出模块是怎么使用的。
前面我们导入lodash时用了 –save选项,我们将index.js和package.json拷贝到另一个文件夹,再执行命令:
npm install
就会自动导入 lodash工具包,再执行 node index,就能运行。方便移植,无需拷贝npm的第三方包。
如果不加 –save的话,则不会自动导入。所以一般都加上 –save选项。
开发依赖包
我们看一例子,安装包如下
npm install gulp gulp-sass –save-dev
注意我们写的选项是 –save-dev,这样在package.json中添加的是开发依赖项”devDependencies”:{…} ,而不是”dependencies”:{..}
这样之后,如果我们复制package.json和index.js到其他文件夹,执行
npm install –production
将不会安装devDependencies下的依赖项。
如果不加 –production选项,devDependencies和dependencies下的依赖项都会安装。
删除包可以用uninstall、remove 或 rm,如果是开发依赖项的话需加 –save-dev
npm uninstall gulp-sass –save-dev 或
npm remove gulp –save-dev
我们也可以安装特定版本的包,后续可以更新
npm rm lodash –save #先删除原来安装的包
npm install lodash@4.17.3 –save #安装特定的版本
npm update lodash #更新包
版本控制
npm包版本一般是 8.2.6这样的格式,主要、次要、补丁三种。主要版本有可能影响调用的API,次要一般是更新特性,补丁则是修复bug。
我们在package.json能看到如下的情形:
…
“dependencies”:{
“lodash”:”^4.17.3″,
},
…
如果版本前的符号是
^ ,代表可以更新次要版本及补丁版本
~,代表只能更新补丁版本
如果不加符号,表示需要确切的版本,比如bootstrap可能需要这样做。
如果是”*”,表示可以更新到最新的版本,包括主要版本。这一般不合适,大版本一般包括重大变化,可能会使程序出错。
全局模块
前面我们安装的包是本地模块,也就是只对当前的文件夹(项目)有效。我们也可以安装全局模块,这样对所有项目都有效。
npm install -g nodemon
加上 -g 参数表示 是全局模块,执行该命令后,package.json不会添加依赖,会安装全局位置,全局位置可以通过命令查询。
npm root -g
查到全局位置。
这里说一下的是 nodemon模块可以监控node各节点,修改后马上就监视到。
nodemon
我们按ctrl+c停止 nodemon,再安装一个有用的包live-server
npm install live-server -g
live-server是一个小型的web服务器,调试时非常有用
如果想删除全局模块怎么做呢?
非常简单,与前面本地模块类似,加上 -g参数即可。
npm remove nodemon -g
列出模块
可以使用list列出安装的模块
npm list
该命令会尽可能多地列出模块。包括安装的模块需依赖的各层级包。
如果仅想列出安装的顶层包,需加上参数 –depth,0表示顶层
npm list –depth 0
层级也可为1,2,…,层级越大列出越详细。
npm脚本
用npm init生成的package.json,默为有个示例脚本 test,我们可以修改,比如下面这样:
...
"scripts":{
"start":"node index.js"
},
...
编辑好脚本,我们在命令行输入:
npm start
相当于执行了 node index.js。这实际是很有用的,别人拿到一个模块,无需查找相关配置或源码,就可以直接执行 npm start就行。
我们删掉全局live-server,在本地安装,然后在脚本里体现。
npm remove live-server -g
npm install –save-dev live-server
再编辑 package.json,在”scripts”节添加一行:
“server”:”live-server”
添加保存之后,再执行:
npm run server即运行了 live-server
注意这里加了run,只有start,test等不用加run直接执行,其他一般都要加。
当然也可以将 名字server改成 dev,这样就可以用 npm run dev运行live-server了。