共计 10123 个字符,预计需要花费 26 分钟才能阅读完成。
欢迎订阅我的公众号,微信搜索【比邻之地】我会定期发布教程,分享软件,有问题欢迎留言!
介绍
NPM 的全称是 Node Package Manager,是随同 NodeJS 一起安装的包管理和分发工具,它很方便让 JavaScript 开发者下载、安装、上传以及管理已经安装的包,类似的还有 cnpm、yarn、tyarn ···
1. 切换淘宝源、官方源
强烈建议 安装 nrm :npm 的源管理器
切换 npm 镜像源
npm config set registry [这里是镜像源 url]
a 官方源
npm config set registry https://registry.npmjs.org
速度慢可以,https -> http,这样网速就会好很多
npm config set registry http://registry.npmjs.org
b 淘宝源
npm config set registry https://registry.npm.taobao.org
c 使用 cnpm(用 cnpm -v
检测是否成功)
npm install -g cnpm --registry=https://registry.npm.taobao.org
d 手动修改设置淘宝源
1. 打开.npmrc 文件(node 默认安装再 C 盘 -C:Program Filesnodejsnode_modulesnpmnpmrc,没有的话可以使用 git 命令行建一个(touch .npmrc),用 cmd 命令建会报错)
2. 增加 registry=https://registry.npm.taobao.org 即可。
检测是否修改成功,查看当前使用的 npm 镜像源
npm config get registry
or
npm info express
显示进度条
npm config set loglevel=http
2. 用 npm 安装依赖包
node 包的安装分为全局模式和本地模式:
A、一般情况下会以本地模式运行,包会被安装到和你的应用程序代码的本地 node_modules> 目录下。
B、在全局模式下,Node 包会被安装到 Node 的安装目录下的 node_modules 下。
获知使用
npm set global=true
来设定安装模式,npm get global
可以查看当前使用的安装模式
以下命令是安装 package.json 中标记的所有的包,安装完毕后会产生一个 node_modules 目录,其目录下就是安装的各个 node 模块。
npm install
or
npm i
安装指定的依赖包(一般标记在 dependencies 下)
npm install [package_name]
注意:
默认会安装包的最新版本,也可以通过在后面加版本号的方式安装指定版本,如
npm install express@3.0.6
项目对模块的依赖可以使用下面的 3 种方法来表示(假设当前版本号是 1.1.0):
兼容模块新发布的补丁版本:~1.1.0、1.1.x、1.1
兼容模块新发布的小版本、补丁版本:^1.1.0、1.x、1
兼容模块新发布的大版本、小版本、补丁版本:*、x
将包安装到全局环境中:
npm install [package_name] -g
注意:
在代码中,直接通过 require() 的方式是没有办法调用全局安装的包的。全局的安装是供命令行使用的,就好像全局安装了 vmarket 后,就可以在命令行中直接运行 vm 命令。
vm 在 linux 系统中的地位类似 windows 中的记事本,但功能要强大的多!
-S / --save
指定的包安装(多数情况下会安装最新版本的包), 信息自动更新到 package.json 的 dependencies(生产阶段的依赖)中
npm install [package-name] --save
or
npm i [package-name] -S
-D / --save-dev
指定的包安装, 信息自动更新到 package.json 的 devDependencies(开发阶段的依赖)下
npm install [package-name] --save-dev
or
npm i [package-name] -D
-O / --save-optional
安装最新版本的包(多数情况下), 安装包的同时自动更新 package.json 的 optionalDependencies(可选阶段的依赖)下
npm install [package-name] --save-optional
or
npm install [package-name] -O
-E / --save-exact
精确安装指定模块版本
npm install [package-name] --save-exact
or
npm install [package-name] -E
输入命令
npm install gulp -ES
, 注意 package.json 文件的 dependencies 字段,可以看出版本号中的 <font color=”red”>^</font> 消失了"devDependencies": {"gulp": "^3.9.1"}
// 输入 npm install gulp -ES 后 "dependencies": {"gulp": "3.9.1"}
查看 node 模块的 package.json 文件夹
npm view moduleNames
注意:
如果想要查看 package.json 文件夹下某个标签的内容,可以使用npm view moduleName labelName
.
查看当前目录下已安装的 node 包(模块及依赖)
npm list
or
npm ls
/
npm ls -g // 查看全局安装的模块及依赖 aliases: list, la, ll
模块的依赖都被写入了 package.json
文件以后,别人打开项目的根目录(项目开源、内部团队合作),使用 npm install
命令可以根据 dependencies
配置安装所有的依赖包(应当注意 package-lock
或 yarn-lock
的作用)
注意:
Node 模块搜索是从代码执行的当前目录开始的,搜索结果取决于当前使用的目录中的 node_modules 下的内容。npm list parseable=true
可以目录的形式来展现当前安装的所有包
3. 卸载安装的包
卸载模块
npm usinstall [package-name]
aliases
remove, rm, r, un, unlink
卸载模块,同时删除模块留在 package.json 中 dependencies(生产环境)下的对应信息
npm uninstall [package-name] --save
or
npm uninstall [package-name] -S
卸载模块,同时删除模块留在 package.json 中 devDependencies(开发环境)下的对应信息
npm uninstall [package-name] --save-dev
or
npm uninstall [package-name] -D
移除
npm remove [package-name]
4. 项目的初始化和一键初始化
npm init // 初始化
or
npm init -y // 一键初始化
aliases[-f|--force|-y|--yes]
执行后会创建一个 package.json 文件(项目的相关信息)
package.json(项目)
{ name : // 项目名称 version: (1.0.0): // 版本号 description: // 简介,对项目进行简介 entry point: // 入口文件的名字 test command: // 测试命令 git repository: //git 仓库地址 keywords: // 关键词 author: // 作者 license: (ISC): // 协议 dependencies: // 写入依赖(生产环境)devDependencies: // 写入依赖(开发环境)}
5. npm start 启动模块(项目运行)
npm start [-- <args>]
启动项目
npm run [项目名称] // vue
npm start // react
······
该命令写在 package.json 文件 scripts 的 start 字段中,可以自定义命令来配置一个服务器环境和安装一系列的必要程序,如
"scripts": {"start": "gulp -ws"}
此时在 cmd 中输入
npm start
命令相当于执行 gulpfile.js 文件自定义的watch
和server
命令。如果 package.json 文件没有设置 start,则将直接启动
node server.js
6. 停止、重启、测试模块
停止模块
npm stop [-- <args>]
重新启动模块
npm restart
or
npm restart [-- <args>]
npm test 测试模块
npm test [-- <args>]
or
npm tst [-- <args>]
该命令写在 package.json 文件 scripts 的 test 字段中,可以自定义该命令来执行一些操 > 作,如
"scripts": {"test": "gulp release"},
此时在 cmd 中输入
npm test
命令相当于执行 gulpfile.js 文件自定义的 release 命令。
7. 查看模块的版本
npm version [newversion | major patch | preminor | prepatch | from-git]
npm [-v | --version] //to print npm version
npm view <pkg> version //to view a package's published version
npm ls //to inspect current package/dependency versions
查看模块的注册信息
npm view [<@scope>/]<name>[@<version>] [<field>[.<subfield>]...] aliases: info, show, v
查看包的依赖关系
npm view [package-name] dependencies
查看包的源文件地址
npm view [package-name] repository.url
查看包所依赖的 Node 的版本
npm view [package-name] engines
查看 npm 使用的所有文件夹
npm help folders
用于更改包内容后进行重建
npm rebuild [package-name]
检查包是否已经过时,此命令会列出所有已经过时的包,可以及时进行包的更新
npm outdated
8. npm 插件部署到 npm 官网
发布一个 npm 包的时候,需要检验某个包名是否已存在
npm search [package-name]
登录 npm 官网(第一次使用本机登录,添加用户)
npm adduser
or
npm adduser [--registry=url] [--scope=@orgname] [--always-auth]
登录 npm 官网(登录过以后,可以直接值用本命令)
npm login
插件的初始化(同样是创建 package.json 文件,与项目的 package.json 不同,这里是插件的信息)
npm init // 初始化
or
npm init -y // 一键初始化
aliases[-f|--force|-y|--yes]
这里是插件的 package.json 的简单介绍
package.json (插件)
{ "name": "myplugin", // 包的名字 要小写 "version": "1.0.0", // 包的版本号。如 "1.0.0" "description": "My New Project description.", //description: 包的描述信息,将会在 npm search 的返回结果中显示,以帮助用户 > 选择合适的包 "main": "index.js", //main: 包的入口文件。"scripts": {"test": "echo \"Error: no test specified\"&& exit 1"}, //scripts: 通过设置这个可以使 NPM 调用一些命令脚本,封装一些功能。"keywords": ["guangju-test-video"], //keywords: 包的关键词信息,是一个字符串数组,同上也将显示在 npm search 的 > 结果中 "author": { "name": "Your Name", "email": "you@mail.com" }, //author: 包的作者 "license": "MIT", //license: 包的开源协议名称 }
其他参数
发布我们的代码到 npm 官网
npm publish
注意:
同一个插件,每一次使用该命令必须保证 package.json 的 version 版本有变化才可以。
在发布的包上设置访问级别
npm access public [ackage]
npm access restricted [package]
npm access grant [read-only|read-write]scope:team [package]
npm access revoke [scope:team] [package]
npm access ls-packages [user | scope | scope:team]
npm access ls-collaborators [package [ user]]
npm access edit [package]
撤销已经发布的包
取消发布的整个包,相当于删除发布到 npm 的代码
npm unpublish [package-name] -f
如果开启了
two-factor-authentication(双重验证)
需要加上--otp=123456
,123456
是手机端 npm 验证 app (Authenticator) 中获取的验证码。npm unpublish --otp=123456 [package-name] -f
撤销已经发布的具体版本,则可以使用:
npm unpublish [package-name]@[version] 例如: npm unpublish [package-name]@1.2.0 // v1.2.0 是想要撤销的版本号
同上,如果开启了
two-factor-authentication(双重验证)
需要加上 >--otp=123456
。npm unpublish [package-name]@[version] --otp=123456
查看当前登录的 npm 用户
npm whoami
查看 npm 配置
npm config ls
9. 清除缓存
npm cache 管理模块的缓存
npm cache add <tarball file>
npm cache add <folder>
npm cache add <tarball url>
npm cache add <name>@<version>
npm cache ls [<path>]
npm cache clean [<path>]
最常用命令无非清除 npm 本地缓存
npm cache clean
强制清除缓存(比如安装 vue-cli 不成功时,清除缓存,再重装)
npm cache clear --force
10. npm 更新和设置其他命令
安装指定版本
npm install [package-name]@[version]
// 例如:npm install vue@2.5.1
查看当前包的安装路径
npm root
查看全局的包的安装路径
npm root -g
查看 npm 安装的版
npm -v
or
npm --version
更新 npm 到最新版本
npm install npm -g
更新 node 模块
npm update [package-name]
npm config 管理 npm 的配置路径
npm config set <key> <value> [-g|--global]
npm config get <key>
npm config delete <key>
npm config list
npm config edit
npm get <key>
npm set <key> <value> [-g|--global]
对于 config 这块用得最多应该是设置代理,解决 npm 安装一些模块失败的问题
例如我在公司内网,因为公司的防火墙原因,无法完成任何模块的安装,这个时候设置代 > 理可以解决npm config set proxy=http://xxx
又如国内的网络环境问题,某官方的 IP 可能被和谐了,国内搭建了镜像,此时简单设置镜 > 像
npm config set registry="http://r.cnpmjs.org"
也可以临时配置,如安装淘宝镜像
npm install -g cnpm --registry=https://registry.npm.taobao.org
11. 帮助命令
查看帮助命令
npm help
or
npm -h
npm help 查看某条命令的详细帮助
npm help <term> [<terms..>]
例如输入
npm help install
,系统在默认的浏览器或者默认的编辑器中打开本地 nodejs 安装包的文件/nodejs/node_modules/npm/html/doc/cli/npm-install.html
npm 包是包含了 package.json 的文件夹,package.json 描述了这个文件夹的结构。访问 npm 的 json 文件夹的方法如下,此命令会以默认的方式打开一个网页,如果更改了默认打开程序则可能不会以网页的形式打开
npm help json
更多命令
附:package.json 文件详解
- 参考英文原版
- 引用国内整理:《npm 的 package.json 中文文档》
npm 会根据包内容设置一些默认值。
"scripts": {"start": "node server.js"}
如果包的根目录有 server.js 文件,npm 会默认将
start
命令设置为node server.js
。"scripts":{"preinstall": "node-waf clean || true; node-waf configure build"}
如果包的根目录有 wscript 文件,npm 会默认将
preinstall
命令用node-waf
进行编译。"scripts":{"preinstall": "node-gyp rebuild"}
如果包的根目录有
binding.gyp
文件,npm 会默认将preinstall
命令用node-gyp
进行编译。"contributors": [...]
如果包的根目录有 AUTHORS 文件,npm 会默认逐行按
Name <email> (url)
格式处理,邮箱和 url 是可选的。#
号和空格开头的行会被忽略。
- name
在 package.json 中最重要的就是 name 和 version 字段。他们都是必须的,如果没有就无法 install
。name 和 version 一起组成的标识在假设中是唯一的。改变包应该同时改变 version。
name 是这个东西的名字。注意:
- 不要把 node 或者 js 放在名字中。因为你写了 package.json 它就被假定成为了 js,不过 > 你可以用 “engine” 字段指定一个引擎(见后文)。
- 这个名字会作为在 URL 的一部分、命令行的参数或者文件夹的名字。任何
non-url-safe
的字符都是不能用的。- 这个名字可能会作为参数被传入
require()
,所以它应该比较短,但也要意义清晰。- 在你爱上你的名字之前,你可能要去
npm registry
查看一下这个名字是否已经被使用了。npm 官网
- version
version 必须能被 node-semver 解析,它被包在 npm 的依赖中。(要自己用可以执行 npm install semver
)
可用的“数字”或者“范围”见 npm 官网.
- description
放简介,字符串,方便在 npm search
中搜索
- keywords
关键字,数组、字符串,方便在 npm search
中搜索
- bugs
你项目的提交问题的 url 和(或)邮件地址
{
"url" : "http://github.com/owner/project/issues",
"email" : "project@hostname.com"
}
- license
你应该要指定一个许可证,让人知道使用的权利和限制的。
最简单的方法是,假如你用一个像 BSD 或者 MIT 这样通用的许可证,就只需要指定一个许可证的名字,像这样:
{"license" : "BSD"}
如果你又更复杂的许可条件,或者想要提供给更多地细节,可以这样:
"licenses" : [
{ "type" : "MyLicense"
, "url" : "http://github.com/owner/project/path/to/license"
}
]
- repository
指定你的代码存放的地方。这个对希望贡献的人有帮助。如果 git 仓库在 github 上,那么 npm docs
命令能找到你。
这样做:
"repository" :
{ "type" : "git"
, "url" : "http://github.com/isaacs/npm.git"
}
"repository" :
{ "type" : "svn"
, "url" : "http://v8.googlecode.com/svn/trunk/"
}
URL 应该是公开的(即便是只读的)能直接被未经过修改的版本控制程序处理的 url。不应该是一个 html 的项目页面。因为它是给计算机看的。
- scripts
scripts
是一个由脚本命令组成的 hash 对象,他们在包不同的生命周期中被执行。key 是生命周期事件,value 是要运行的命令。
参考上面的 npm start
、npm test
命令
更多详细请看 npm-scripts 官网
- config
“config” hash 可以用来配置用于包脚本中的跨版本参数。在实例中,如果一个包有下面的配置:
{
"name" : "foo",
"config" : {"port" : "8080"}
}
然后有一个 start
命令引用了 npm_package_config_port
环境变量,用户可以通过npm config set foo:port 8001
来重写他。
参见 npm 官网。
- dependencies
依赖是给一组包名指定版本范围的一个 hash。这个版本范围是一个由一个或多个空格分隔的字符串。依赖还可以用 tarball 或者 git URL。
请不要将测试或过渡性的依赖放在 dependencieshash 中。见下文的 devDependencies
version 必须完全和 version 一致 >version 必须比 version 大 >=version 同上 <version 同上 <=version 同上 ~version 大约一样 1.2.x 1.2.0, 1.2.1, 等,但不包括 1.3.0 http://... 见下文 '依赖 URL' * 所有 "" 空,同 * version1 - version2 同 >=version1 <=version2. range1 || range2 二选一。git... 见下文 '依赖 Git URL' user/repo 见下文 'GitHub URLs'
比如下面都是合法的:
{ "dependencies" :
{ "foo" : "1.0.0 - 2.9999.9999"
, "bar" : ">=1.0.2 <2.1.2"
, "baz" : ">1.0.2 <=2.3.4"
, "boo" : "2.0.1"
, "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
, "asd" : "http://asdf.com/asdf.tar.gz"
, "til" : "~1.2"
, "elf" : "~1.2.3"
, "two" : "2.x"
, "thr" : "3.3.x"
}
}
- devDependencies
如果有人要使用你的模块,那么他们可能不需要你开发使用的外部测试或者文档框架。
在这种情况下,最好将这些附属的项目列在 devDependencies 中。
这些东西会在执行 npm link
或者 npm install
的时候初始化,并可以像其他 npm 配置参数一样管理。
对于非特定平台的构建步骤,比如需要编译 CoffeeScript,可以用 prepublish 脚本去实现,并把它依赖的包放在 devDependency 中。(注:prepublish 定义了在执行 npm publish
的时候先行执行的脚本)
比如:
{ "name": "ethopia-waza",
"description": "a delightfully fruity coffee varietal",
"version": "1.2.3",
"devDependencies": {"coffee-script": "~1.6.3"},
"scripts": {"prepublish": "coffee -o lib/ -c src/waza.coffee"},
"main": "lib/waza.js"
}
prepublish 脚本会在 publishing 前运行,这样用户就不用自己去 require 来编译就能使用。并且在开发模式中(比如本地运行 npm install
)会运行这个脚本以便更好地测试。
参考其他资料:
https://docs.npmjs.com/#cli
https://github.com/ericdum/mu…
https://segmentfault.com/a/11…
(完)
欢迎订阅我的公众号,微信搜索【比邻之地】我会定期发布教程,分享软件,有问题欢迎留言!