学习npm总给我一个熟悉感觉,基本上和学习C/C++的make工具一样。
在make工具中,项目下一般有makefile文件,对应到npm也是一样。
当执行npm init时,会生成一个package.js文件,这个文件描述当前项目信息。它定义了当在其他地方使用npm install安装本项目时需要安装什么依赖。另外也定义了支持哪些间接执行shell命令等等。这几乎就又是一个make工具。
可能通过help查看他支持功能
npm help
npm 命令 --help
总体上就是创建/安装/卸载/更新/锁定某个库包到项目中或者本机全局环境中。
核心操作
类似C的hello world
,他的第1个重要的命令是npm init
,作用是在当前目录创建一个package.js
, 之后所有命令都是围绕在这个文件基本的操作。
package.js
文件包含一些重要字段:
name: 表示包名
version:表示版本
entry point:表示入口文件,一般是传递给Node程序,相关于执行了node entry.js
script:表示通过npm run xxx 中 xxx对应的npm或者shell命令
dependencies/devDependencies: 当前项目依赖js库及其版本
description/keywords/author/license:项目简介描述信息
使用npm init -y
后也可以再次设置一些项目配置信息
npm config set init.author.name YOUR_NAME
npm config set init.author.email YOUR_EMAIL
执行命令
npm run [cmd]
如果不指定cmd则会罗列出支持执行的命令(script字段配置中)
包管理
1、查看react包主页
npm home react
2、查react包信息
npm info react
3、安装包
npm install 模块名[@版本] [--save/-S --save-dev/-D] [-g]
可以用@指定版本,npm的版本分为大、次、小三个版本号,用
.
号分开,样式如3.4.1
。 如果在版本号前使用^
(接受次、小版本变化)、~
(只接受小版本变动)、latest
(最新版本)。package.json只会保存模糊版本,如果项目只能依赖某个具体版本时,package-lock.json因为会保存具体版本,所以也需要版本git/svn仓库管理。命令样式npm install bootstrap@3.3.7
有另外一个不需要仓库管理package-lock.json文件的办法是,安装特定版本依赖包前用类似npm config set save-prefix='~'
命令指定package.json保存允许小版本变动。如果完全不接受版本变化,则用npm config set save-exact true
,然后在安装。模块包是区分生产、开发环境的
--save/-S
表示生产环境依赖的模块(会更新package.json中的dependencies字段)。同理也有--save-dev/-D
参数更新到开发环境依赖模块。比如给开发环境安装eslint环境(js语法检查模块)命令就是npm install -D eslint
。如果不指定是开发环境则默认是生产环境依赖。这个命令在把eslint模块安装在当前目录的node_modules
目录下同时也会创建更新package-lock.json文件。如果需要在本机环境全局安装,则使用
-g
, 此时可以使用npm root -g
查看具体是安装在哪里。或者使用npm list -g
查看当前已经安装了哪些全局模块。
一般node_modules目录是不需要进行版本管理的,使用npm install会自动下载模块。
当不指定包时,就会从package.json文件自动下载所有依赖项到本地。
4、查看已经安装包
npm list|ls [-g] [模块名]
如果有指定模块名时,只查指定模块
如果此命令有UNMET DEPENDENCY
不满足依赖时,需要重新生成本地包缓存。
npm -fr node_modules/ # 删除已经安装模块
npm cache clean # 清理npm内部缓存
npm install # 重新安装
5、查看远程最新版本
npm view 模块名 [version]
6、查看远程指定模块的所有版本
npm view 模块名 versions
7、卸载本地/全局模块
npm uninstall [-g] 模块名
8、搜索远程模块
npm search 模块名
9、更新本地/全局模块
npm update [-g] 模块名
10、安装项目所有依赖模块
npm ci
会删除node_modules,但不会更新package.json
评论 (0)