摘要:但在生产环境下,如果不指定保存依赖的版本号会存在问题。它会生成一个文件,不仅记录了当前环境中使用的模块精确的版本号,还记录了这些模块的其他依赖的版本,以此类推。
本文来自国外新手向技术博客RisingStack。有兴趣的同学可点击原文查看。
相信npm install是npm-cli最常用的功能,但其实它还有很多其他可挖掘的地方。在本文中,你将会学习如何在应用开发的整个生命周期中——包括从新建,到开发,再到发布上线,npm如何帮你更好地完成开发。
0. npm基础使用在进入今天的主题之前,我们先来回顾下一些npm命令,例如如何确定你的npm版本、哪些命令可供你使用等。
0.1 npm版本要查看现有的npm版本,在命令行工具中运行如下命令:
$ npm --version
但npm其实能告诉你更多关于版本的信息,如目前各package的版本、Node.js的版本、OpenSSL版本、V8的版本等,如下:
$ 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" }0.2 npm help
和很多cli工具一样,npm也内置了一个很实用的help功能。让你可以随时查阅各种命令的描述和摘要,它们其实就是linux的man-page而已。例如:
$ npm help test NAME npm-test - Test a package SYNOPSIS npm test [--1. 用npm init来创建你的项目] 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.
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!
创建项目的时候,npm init的优点在于能给交互式地替你创建package.json文件,它会弹出问题让你填写项目的名称和描述等等。但其实还有更简化的方式:
$ npm init --yes
如果你使用npm init --yes的话,它不会问你要如何创建,就直接按默认配置创建一个package.json。这个默认配置当然也是可实现设置的:
npm config set init.author.name YOUR_NAME npm config set init.author.email YOUR_EMAIL2. 查找npm的package
考虑到npm中有上万个模块供你选择,要找到合适的package是很困难的。我们团队的经验是这样,最近在Node.js的问卷调查中,很多开发者也告诉我们要找到合适的package是很郁闷的一件事情。所以现在我们试着找一个能发送HTTP请求的模块吧~
npms.io这个网站能很好地帮助到我们。它将各个package的质量、受欢迎度、可维护性等指标做了量化并展现。具体的说,这些指标包括:是否使用了过时的依赖包、是否有代码检查配置、是否经过测试以及最近的版本是何时发布的,等等。
3. 了解你选择的package当你选定了你要用的模块之后(本例中我们选用了request模块),我们应该首先查看它的文档,看看有什么现存的issue,以便充分了解我们要用在应用中的模块。希望你牢记一点,当使用的npm package越多,你可能遇到的不可靠或危险的package也就越多。想了解更多npm相关的安全风险的话,请阅读我们写的一篇指导文档。
如果想去到package的主页,可执行下面的命令:
$ npm home request
要查看现存的issue,或者公开的roadmap,执行以下命令:
$ npm bugs request
另外,如要查看package的仓库,执行以下命令:
$ npm repo request4. 保存依赖
当你找到想用在工程里的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 true5. 锁定依赖
你可以像前面一节讲的那样,在package.json里面指定了保存依赖的版本号。但大部分npm模块的作者不会这样做,因为他们想自动地获取补丁和新功能。
但在生产环境下,如果不指定保存依赖的版本号会存在问题。因为如果恰好你开发的过程中作者发布了新版本,那么有可能本地和生产环境使用的依赖的版本就是不一样的。这个时候,如果新版本有bug的话,就会影响到生产环境。
要解决这个问题,你可以使用npm shrinkwrap。它会生成一个npm-shrinkwrap.json文件,不仅记录了当前环境中使用的模块精确的版本号,还记录了这些模块的其他依赖的版本,以此类推。一旦工程中有了此文件,npm install就会使用它来复制一个完全一样的依赖树。
6. 查找过时的依赖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请求。
7. 保存生产环境中没有devDepenendencies称devDepenendencies为开发环境依赖是有原因的,你在生产环境是用不着他们的。生产环境不用这些devDepenendencies可以让你线上的代码包更小更安全,因为多一个依赖就多一个安全风险。
如果需要只安装生产环境依赖,运行:
$ npm install --production
或者,你可以设置NODE_ENV变量为生产环境:
$ NODE_ENV=production npm install8. 确保你的项目和token的安全
如果你开发的时候登陆了Linux系统的用户,那你的npm token就会存在.npmrc文件中。有的时候这个文件会不小心被上传到github。目前,在github上搜索.npmrc文件的话,能找到好几千个,里面很多都包含了token。如果你自己的仓库里也有.xxx的文件的话,赶快检查下自己的证书有没有被上传!
另一个潜在的安全隐患在于,有的文件会被不小心上发布到npm上。一般来说npm是参考.gitignore文件来决定哪些文件会被上传。但你也可以加一个.npmignore文件,它会override.gitignore。
9. 开发package在本地开发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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/91342.html
摘要:在正式前端一些小细节前端掘金英文原文,翻译未来的太让人兴奋了一方面,是全新的页面布局方式另一方面,是酷炫的滤镜颜色等视觉效果。老司机教你更好的进行编程个技巧前端掘金并不总是容易处理。 CSS3 实现文字流光渐变动画 - 前端 - 掘金来自百度前端技术学院的实践任务:有趣的鼠标悬浮模糊效果,参考:http://ife.baidu.com/course/d...,用CSS3实现了一下,顺便...
摘要:特意对前端学习资源做一个汇总,方便自己学习查阅参考,和好友们共同进步。 特意对前端学习资源做一个汇总,方便自己学习查阅参考,和好友们共同进步。 本以为自己收藏的站点多,可以很快搞定,没想到一入汇总深似海。还有很多不足&遗漏的地方,欢迎补充。有错误的地方,还请斧正... 托管: welcome to git,欢迎交流,感谢star 有好友反应和斧正,会及时更新,平时业务工作时也会不定期更...
摘要:本周于上海闭幕,掘金和知乎上都有对应的实录和问答,但会议的视频目前都还没放出来,有心的同学如果找到了欢迎分享。建议中英文对照阅读。英文原文前端独立技术博客推荐推荐一些现在还在坚持原创的博主,有业界大牛,也有小鲜肉,也有国外美女。 CSS 样式书写规范最佳实践 本文的所列是实践当中得出的一套比较不错的 CSS 书写规范,可以结合自身团队发展出一套适合自己业务的规范。 CSS中的字体与排版...
摘要:本周于上海闭幕,掘金和知乎上都有对应的实录和问答,但会议的视频目前都还没放出来,有心的同学如果找到了欢迎分享。建议中英文对照阅读。英文原文前端独立技术博客推荐推荐一些现在还在坚持原创的博主,有业界大牛,也有小鲜肉,也有国外美女。 CSS 样式书写规范最佳实践 本文的所列是实践当中得出的一套比较不错的 CSS 书写规范,可以结合自身团队发展出一套适合自己业务的规范。 CSS中的字体与排版...
阅读 1228·2021-11-11 16:54
阅读 1740·2021-10-13 09:40
阅读 937·2021-10-08 10:05
阅读 3500·2021-09-22 15:50
阅读 3702·2021-09-22 15:41
阅读 1784·2021-09-22 15:08
阅读 2340·2021-09-07 10:24
阅读 3573·2019-08-30 12:52