若是你是一个JavaScript系的开发者,必定不会陌生NPM,它既是一个平台,也是一个工具。在这个平台上,咱们可以使用其余开发者提供的功能代码,固然咱们也能将咱们本身代码提交到这里分享给世界上的开发者。node
如下记录一些NPM做为工具的一些使用技巧。git
npmrc
.npmrc 作为npm的配置文件,它能够定义在多个地方。github
用户根目录,根目录内全部的npm指令都会查询到该配置web
npm内建配置文件npm
当前项目根目录,用于配置特定于当前项目的配置json
npmrc对咱们来讲十分有用,咱们能够配置例如username、registry、email等信息。 eg:数组
save=true
save-exact=true
email=wfsovereign@outlook.com
username=wfsovereign
registry=https://registry.npm.taobao.org
npm最让人头疼的问题之一就是版本号了,这里配置了save和save-exact属性,做用是让咱们 npm install
指令安装的依赖自动保存在package.json
文件的dependencies
中而且让版本号固定。服务器
一些国内的服务器在拉取某些被墙的包的常常会失败或者速度很慢,这个时候咱们能够试试淘宝NPM镜像(这是一个完整 npmjs.org 镜像,你能够用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽可能与官方服务同步)。官方还定制了cnpm,这个看具体状况而定了。好比,我曾经的一个项目,部署在微软的Asure上面,这个服务器感受被墙的厉害,用官方的npm库下phantomjs的zip文件运气好的话也得下个两三次才能下下来,后来为了解决这个问题尝试了淘宝镜像,不过问题就出在用了cnpm,用cnpm拉的包在本地编译不了,后来换回npm,使用淘宝镜像,一切正常了~工具
package.json
package.json
是项目的配置管理文件,它定义了这个项目所须要的各个依赖模块以及项目的配置信息(名字,版本号,许可证等)。一个最基本的package.json
必须有name
和version
,差很少长这样:post
{
"name": "xxx",
"version": 0.0.0
}
咱们能够经过npm init
指令初始化建立一个package.json文件,
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "wfsovereign",
"license": "ISC",
"devDependencies": {
},
"dependencies": {
}
}
下面分属性介绍
scripts
scripts
定义了一些脚本指令的npm命令缩写,经过这些命令咱们能够方便的启动项目、进行测试或者拿到一些钩子来作某些指令前预先作的事,
"scripts": {
"pretest": "echo \"this is pre test\" ",
"test": "echo \"Error: no test specified\"",
"posttest": "echo \"this is post test\""
}
当咱们执行npm test
会获得以下输出:
this is pre test
test@1.0.0 test echo "Error: no test specified"
Error: no test specified
test@1.0.0 posttest echo "this is post test"
this is post test
经过如上实验,咱们可以知道,prexx
指令是一个预执行指令,postxx
是一个后置指令,他俩都和xx
指令强相关。
main
main
指定项目加载的入口文件,默认是根目录的inde.js
file
file
是一个字符串的数组,指定咱们发布的包应该包含当前目录的哪些文件,这个在咱们发布包的时候颇有用,由于开发包里面的文件夹不是都须要发布出去的。固然一下文件是始终会被包含进去的,不论咱们是否设置,
- package.json
- README
- CHANGES / CHANGELOG / HISTORY
- LICENSE / LICENCE
- NOTICE
- The file in the "main" field
keywords
keywords
指定了在库中搜索时可以被哪些关键字搜索到,因此通常这个会多写一些项目相关的词在这里,这是一个字符串的数组。
其他属性详情能够查询官方文档
semantic version
关于语义化的版本号,这里很少讲,放一些preference
Nodejs项目中最多见的一些版本标识( *, ~, ^ ),常常忘了它们的含义,这里记录一下:
*
任意版本
1.0.0
安装指定的1.0.0版本
lodash: 4.7.0 会安装准确的4.7.0到咱们的node_module目录
~1.0.0
安装 >= 1.0.0 小于 1.(0 + 1).0的最新版本
^1.0.0
安装 >= 1.0.0 小于 (1 + 1).0.0的最新版本
package publish
如何发布一个包?
npm addUser
按照提示输入帐号密码,建立一个npm的帐号,若是已有帐号直接到下一步
npm whoami
查看当前用户,确认是使用当前用户来发布包
npm publish
而后就能够直接发布了,固然这个时候可能会出现各类问题,好比你的包和别人的重名了,或者当前的包的版本号已经发布过了等等
说到发布包,这里在记录一些开发包的小技巧。
咱们在开发包的时候免不了一些调试,可是这些调试的过程咱们并不想它发布又想确保当前的功能是可用的,这个时候有两个办法可以帮助咱们来解决这个问题。
关于npm link
的详细介绍咱们能够看官网,这里介绍三种用法:
- 直接在咱们开发包的主目录下直接使用,这个时候,至关于咱们在npm global的目录下符号连接了当前包。
npm link package-name
, 做用至关于把一个全局安装的包link到了咱们当前目录下node_module中。
- 在
package.json
文件的dependencies中使用以下方式声明,而后就如同使用一个已经正常发布的包同样安装使用就行。
"dependencies": {
"bar": "file:../foo/bar"
}
ps: 继续努力啊,如风少年~