本文来自国外新手向技术博客RisingStack。有兴趣的同窗可点击原文查看。node
相信npm install
是npm-cli最经常使用的功能,但其实它还有不少其余可挖掘的地方。在本文中,你将会学习如何在应用开发的整个生命周期中——包括重新建,到开发,再到发布上线,npm如何帮你更好地完成开发。linux
在进入今天的主题以前,咱们先来回顾下一些npm命令,例如如何肯定你的npm版本、哪些命令可供你使用等。git
要查看现有的npm版本,在命令行工具中运行以下命令:github
$ npm --version
但npm其实能告诉你更多关于版本的信息,如目前各package的版本、Node.js的版本、OpenSSL版本、V8的版本等,以下:docker
$ npm version { bleak: '1.0.4', npm: '2.15.0', ares: '1.10.1-DEV', http_parser: '2.5.2', icu: '56.1', modules: '46', node: '4.4.2', openssl: '1.0.2g', uv: '1.8.0', v8: '4.5.103.35', zlib: '1.2.8' }
和不少cli
工具同样,npm也内置了一个很实用的help
功能。让你能够随时查阅各类命令的描述和摘要,它们其实就是linux的man-page而已。例如:npm
$ npm help test NAME npm-test - Test a package SYNOPSIS npm test [-- <args>] aliases: t, tst DESCRIPTION This runs a package's "test" script, if one was provided. To run tests as a condition of installation, set the npat config to true.
npm init
来建立你的项目When starting a new project npm init can help you a lot by interactively creating a package.json file. This will prompt questions for example on the project's name or description. However, there is a quicker solution!json
建立项目的时候,npm init
的优势在于能给交互式地替你建立package.json
文件,它会弹出问题让你填写项目的名称和描述等等。但其实还有更简化的方式:安全
$ npm init --yes
若是你使用npm init --yes
的话,它不会问你要如何建立,就直接按默认配置建立一个package.json
。这个默认配置固然也是可实现设置的:ide
npm config set init.author.name YOUR_NAME npm config set init.author.email YOUR_EMAIL
考虑到npm
中有上万个模块供你选择,要找到合适的package是很困难的。咱们团队的经验是这样,最近在Node.js的问卷调查中,不少开发者也告诉咱们要找到合适的package是很郁闷的一件事情。因此如今咱们试着找一个能发送HTTP请求的模块吧~工具
npms.io这个网站能很好地帮助到咱们。它将各个package的质量、受欢迎度、可维护性等指标作了量化并展示。具体的说,这些指标包括:是否使用了过期的依赖包、是否有代码检查配置、是否通过测试以及最近的版本是什么时候发布的,等等。
当你选定了你要用的模块以后(本例中咱们选用了request
模块),咱们应该首先查看它的文档,看看有什么现存的issue,以便充分了解咱们要用在应用中的模块。但愿你牢记一点,当使用的npm package越多,你可能遇到的不可靠或危险的package也就越多。想了解更多npm相关的安全风险的话,请阅读咱们写的一篇指导文档。
若是想去到package的主页,可执行下面的命令:
$ npm home request
要查看现存的issue,或者公开的roadmap,执行如下命令:
$ npm bugs request
另外,如要查看package的仓库,执行如下命令:
$ npm repo request
当你找到想用在工程里的package以后,下一步就是安装和保存它。最经常使用的方式是采用npm install request
(译注:其中的request
是package名字)。
若是你还想把这个package自动加到package.json
里,你能够这样:
$ npm install request --save
npm
会把你的依赖保存起来,并加上^
前缀。这个前缀的意思是,下次再使用npm install
是时候还会自动安装这个package的在此大版本下的最新版本。若是你想修改这个功能的话,能够:
$ npm config set save-prefix='~'
若是你就想保存目前的这个版本,能够:
$ npm config set save-exact true
你能够像前面一节讲的那样,在package.json
里面指定了保存依赖的版本号。但大部分npm模块的做者不会这样作,由于他们想自动地获取补丁和新功能。
但在生产环境下,若是不指定保存依赖的版本号会存在问题。由于若是刚好你开发的过程当中做者发布了新版本,那么有可能本地和生产环境使用的依赖的版本就是不同的。这个时候,若是新版本有bug的话,就会影响到生产环境。
要解决这个问题,你可使用npm shrinkwrap
。它会生成一个npm-shrinkwrap.json
文件,不只记录了当前环境中使用的模块精确的版本号,还记录了这些模块的其余依赖的版本,以此类推。一旦工程中有了此文件,npm install
就会使用它来复制一个彻底同样的依赖树。
npm提供了一个内置的工具方法来查看过期的依赖:npm outdated
。
$ npm outdated conventional-changelog 0.5.3 0.5.3 1.1.0 @risingstack/docker-node eslint-config-standard 4.4.0 4.4.0 6.0.1 @risingstack/docker-node eslint-plugin-standard 1.3.1 1.3.1 2.0.0 @risingstack/docker-node rimraf 2.5.1 2.5.1 2.5.4 @risingstack/docker-node
当你维护的项目不少的时候,要保持每一个项目中的依赖都是最新的是一件很痛苦的事情。要实现这个任务的自动化,能够选用Greenkeeper,当有依赖更新的时候,它会自动为你的仓库发pull请求。
devDepenendencies
称devDepenendencies
为开发环境依赖是有缘由的,你在生产环境是用不着他们的。生产环境不用这些devDepenendencies
可让你线上的代码包更小更安全,由于多一个依赖就多一个安全风险。
若是须要只安装生产环境依赖,运行:
$ npm install --production
或者,你能够设置NODE_ENV
变量为生产环境:
$ NODE_ENV=production npm install
若是你开发的时候登录了Linux系统的用户,那你的npm token就会存在.npmrc
文件中。有的时候这个文件会不当心被上传到github。目前,在github上搜索.npmrc
文件的话,能找到好几千个,里面不少都包含了token。若是你本身的仓库里也有.xxx
的文件的话,赶快检查下本身的证书有没有被上传!
另外一个潜在的安全隐患在于,有的文件会被不当心上发布到npm上。通常来讲npm是参考.gitignore
文件来决定哪些文件会被上传。但你也能够加一个.npmignore
文件,它会override.gitignore
。
在本地开发package的时候,你们通常都会在发布以前在本身的项目上先实践一下。这个时候npm link
就能派上用场。
npm link
的做用在于,它会在全局目录建立一个symlink(符号连接),指向npm link
所运行的那个package。
你也能够在其余地方运行npm link package-name
,这样会在全局安装的package-name
和目前项目的/node_modules
之间建立一个symlink。
能够像下面这样实践一下!
# create a symlink to the global folder /projects/request $ npm link # link request to the current node_modules /projects/my-server $ npm link request # after running this project, the require('request') # will include the module from projects/request