对于一个项目,常用的一些npm简单命令包含的功能有:初始化一个文件夹(npminit),下载npm模块(npminstall),创建测试(npmtest)和自定义脚本(npmrun)。但是,进一步了解一些npm的使用技巧可以彻底改变你的日常开发任务。
如果你是一个Javascript系的开发者,一定不会陌生NPM,它既是一个平台,也是一个工具。在这个平台上,我们能够使用其他开发者提供的功能代码,当然我们也能将我们自己代码提交到这里分享给世界上的开发者。
以下记录一些NPM作为工具的一些使用技巧。
npmrc
.npmrc做为npm的配置文件,它可以定义在多个地方。
~/.npmrc
用户根目录,根目录内所有的npm指令都会查询到该配置
/path/to/npm/npmrc
npm内建配置文件
./.npmrc
当前项目根目录,用于配置特定于当前项目的配置
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属性,作用是让我们npminstall指令安装的依赖自动保存在package.json文件的dependencies中并且让版本号固定。
一些国内的服务器在拉取某些被墙的包的经常会失败或者速度很慢,这个时候我们可以试试淘宝NPM镜像(这是一个完整npmjs.org镜像,你可以用此代替官方版本(只读),同步频率目前为10分钟一次以保证尽量与官方服务同步)。官方还定制了cnpm,这个看具体情况而定了。比如,我曾经的一个项目,部署在微软的Asure上面,这个服务器感觉被墙的厉害,用官方的npm库下phantomjs的zip文件运气好的话也得下个两三次才能下下来,后来为了解决这个问题尝试了淘宝镜像,不过问题就出在用了cnpm,用cnpm拉的包在本地编译不了,后来换回npm,使用淘宝镜像,一切正常了~
package.json
package.json是项目的配置管理文件,它定义了这个项目所需要的各个依赖模块以及项目的配置信息(名字,版本号,许可证等)。一个最基本的package.json必须有name和version,差不多长这样:
{
"name":"xxx",
"version":0.0.0
}
我们可以通过npminit指令初始化创建一个package.json文件,
下面分属性介绍
scripts
scripts定义了一些脚本指令的npm命令缩写,通过这些命令我们可以方便的启动项目、进行测试或者拿到一些钩子来做某些指令前预先做的事,
当我们执行npmtest会得到如下输出:
通过如上实验,我们能够知道,prexx指令是一个预执行指令,postxx是一个后置指令,他俩都和xx指令强相关。
main
main指定项目加载的入口文件,默认是根目录的inde.js
file
file是一个字符串的数组,指定我们发布的包应该包含当前目录的哪些文件,这个在我们发布包的时候很有用,因为开发包里面的文件夹不是都需要发布出去的。当然一下文件是始终会被包含进去的,不论我们是否设置,
package.json
README
CHANGES/CHANGELOG/HISTORY
LICENSE/LICENCE
NOTICE
Thefileinthe“main”field
keywords
keywords指定了在库中搜索时能够被哪些关键字搜索到,所以一般这个会多写一些项目相关的词在这里,这是一个字符串的数组。
其余属性详情可以查询官方文档
semanticversion
关于语义化的版本号,这里不多讲,放一些preference
npmsemver
Gravatarssemver
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的最新版本
packagepublish
如何发布一个包?
npmaddUser按照提示输入账号密码,创建一个npm的账号,如果已有账号直接到下一步
npmwhoami查看当前用户,确认是使用当前用户来发布包
npmpublish然后就可以直接发布了,当然这个时候可能会出现各种问题,比如你的包和别人的重名了,或者当前的包的版本号已经发布过了等等
说到发布包,这里在记录一些开发包的小技巧。
更精准的模块搜索
到目前为止,npm上已经有超过350000个模块了,并且每天还在持续增长。尽管有很多非常棒的模块,但是你还是想避免使用一些不受欢迎的、存在bug的或者无人维护的模块。在npmjs和Github上搜索npm模块是很实用但这还有一些其它选择:
npms
npms根据一个基于项目版本、模块下载次数、最新更新日期、提交频率、测试覆盖率、文档、贡献者数量、issues数、star数、forks数和作者在社区的地位的综合测量分数进行模块排名。
npmDiscover
npmDiscover定位于快速搜索和其它模块通常一起使用的模块,如body-parser通常和Express一起使用。
PackagesbyPageRank
PackagesbyPageRank按照模块的谷歌排名进行搜索和排序。
CuratednpmLists
还一个选择就是利用别人的搜索结果。当需要一个健壮的解决方案时,我经常会参考sindresorhus的AwesomeNode.js。
我们在开发包的时候免不了一些调试,但是这些调试的过程我们并不想它发布又想确保当前的功能是可用的,这个时候有两个办法能够帮助我们来解决这个问题。
npmlink
关于npmlink的详细介绍我们可以看官网,这里介绍三种用法:
直接在我们开发包的主目录下直接使用,这个时候,相当于我们在npmglobal的目录下符号链接了当前包。
npmlinkpackage-name,作用相当于把一个全局安装的包link到了我们当前目录下node_module中。
在package.json文件的dependencies中使用如下方式声明,然后就如同使用一个已经正常发布的包一样安装使用就行。
"dependencies":{
"bar":"file:../foo/bar"
}
NPM-NetworkPowerManager网络管理电源控制器,是克莱沃自主研发、生产制造的具有世界最先进技术水平的新一代网络管理电源监控产品。