快乐Node码农的11个习惯
在package.json中设定scripts.start,你就可以在命令行中用npm start启动程序了。这个非常方便,因为克隆了你的程序的其他node开发人员不用猜就能轻松运行它。
额外奖励:如果在package.json中定义了scripts.start,你就不需要Procfile了(Heroku平台用Procfile来声明在你程序的dynos上运行什么命令)。使用npm start会自动创建一个作为web进程的Procfile。
这里有个启动脚本示例:
4.指定测试脚本
就像团队中的所有人都应该可以运行程序一样,他们也应该可以测试它。package.json中的scripts.test就是用来指定运行测试套件的脚本的。如果你用mocha之类的东西运行测试,一定要确保把它包含在package.json里的devDependencies中,并且指向安装在你项目本地的文件,而不是全局安装的mocha:
5.不要把依赖项放在源码的版本控制中
很多node程序使用的npm模块带有C语言写的依赖项,比如bson、ws和hiredis,这些依赖项必须在Heroku的64位Linux架构下进行编译。编译过程可能非常耗时。为了让构建过程尽可能的快,Heroku的node buildpack在下载和编译完依赖项后会缓存它们,以便在后续部署中重用。这个缓存是为了降低网络流量并减少编译次数。
忽略node_modules目录也是模块创作者推荐的npm实践。应用程序和模块之间少了一个区别!
echo node_modules gt; gt; .gitignore 6.用环境变量配置npm
以下内容摘自npm配置:
所有以npm_config_开头的环境变量都会被解释为配置参数。比如说环境中有npm_config_foo=bar时,会将配置参数foo设置为bar。任何没有给出值的环境配置的值都会设置为true。配置值对大小写不敏感,所以NPM_CONFIG_FOO=bar也一样。
最近在所有的Heroku构建中都有程序的环境。这一变化让Heroku上的node用户无需修改程序代码就可以控制他们的npm配置。习惯#7是这一方式的完美例证。
7.带着你自己的npm注册中心最近几年公共npm注册中心出现了突飞猛进式的增长,因此会偶尔不稳定。所以很多node用户开始寻求公共注册中心之外的方案,他们或者是出于开发和构建过程中速度及稳定性方面的考虑,或者是因为要放置私有的node模块。
最近几个月冒出了一些可供选择的npm注册中心。Nodejitsu和Gemfury提供收费的私有注册中心,此外也有一些免费的,比如Mozilla的只读S3/CloudFront镜像和Maciej Małecki的欧洲镜像。
在Heroku上配置node程序使用定制注册中心很容易:
heroku config:set npm_config_registry=http://registry.npmjs.eu 8.追踪过期的依赖项
如果你编程的时间足够长,可能已经领教过相依性地狱的厉害了。好在Node.js和npm接纳了semver,即 语义化版本管理规范 ,设置了一个健全的依赖项管理先例。在这个方案下,版本号和它们的变化方式传达的含义涉及到了底层代码,以及从一个版本到下一版本修改了什么。
npm有一个很少有人知道的命令,outdated。它可以跟npm update结合使用,能够找出程序的那些依赖项已经过期了,需要更新:
如果你做的是开源的node程序或模块,可以看看david-dm,NodeICO和shields.io,你可以用这三个优秀服务所提供的图片徽章在项目的README或网站上显示生动的依赖信息。
9.用npm脚本运行定制的构建步骤随着npm生态系统的持续增长,开发和构建过程的自动化选择也会随之增长。Grunt是迄今为止node世界中最流行的构建工具,但像gulp.js这种新工具,以及普通的老式npm脚本也因为较轻的负载受到欢迎。
在你把node程序部署到Heroku上时,要运行npm install --production命令以确保程序的npm依赖项会被下载下来装上。但那个命令也会做其它事情:它会运行你在package.json文件中定义的所有npm脚本钩子,比如preinstall和postinstall。这里有个样本:
"name": "my-node-app",
这些脚本可以是行内bash命令,或者也可以指向可执行的命令行文件。你还可以在脚本内引用其他npm脚本:
"scripts": {
11. Browserify
客户端JavaScript有乱如麻团般的遗留代码,但那并不是语言本身的错。由于缺乏合理的依赖项管理工具,让jQuery-插件拷贝-粘帖的黑暗时代延续了好多年。感谢npm,带着我们步入了前端振兴的年代:npm注册中心像野草一样疯长,为浏览器设计的模块也呈现出了惊人的增长势头。
Browserify是一个让node模块可以用在浏览器中的神奇工具。如果你是前端开发人员,browserify将会改变你的人生。可能不是今天,也不是明天,但不会太久。如果你想开始使用browserify,请参阅这些文章。
你有哪些习惯?不管你已经做过一段时间node程序,还是刚刚开始,我们都希望这些小技巧能对你有所帮助。如果你有一些(健康的)node习惯想要跟大家分享,请在发tweet时带上#node_habits标签。编码快乐!
原文发布时间为:2014-04-23
本文来自云栖社区合作伙伴“Linux中国”
算法题每日一练---第16天:好好学习 汤姆跟爷爷来中国旅游。一天,他帮助中国的小朋友贴标语。他负责贴的标语是分别写在四块红纸上的四个大字:“好、好、学、习”。但是汤姆不认识汉字,他就想胡乱地贴成一行。
入园1周年---从小白到大白的经历 入园一周年---小白到大白的经历 去年的今天,我下定决心从零基础起开始学前端,今天正好一周年。我简单聊聊这一年的收获和成长。 刚开始学的时候,我坚持每天晚上8.00-11.00学习,学完后,并把学习内容进行总结,写到博客园里,一直坚持着,直到我回到西安找到工作。
相关文章
- node - multer 加图片后缀
- Node.js进程管理之子进程
- [WASM] Run WebAssembly in Node.js using the node-loader
- [Node] Run Any Version of a Node Tool with npx
- [Node.js] node-persist: localStorage on the server
- [Node.js] Level 6. Socket.io
- node中的require和exports
- windows下安装node.js
- [Node.js] Using npm link to use node modules that are "in progress"
- [Node.js]32. Level 7: Working with Lists -- Redis
- [Node.js]24. Level 5: Express, Express routes
- 如何在 SAP CRM WebClient UI 里在 Context node 上下文里访问其他 Context Node 的数据
- SAP CRM产品主数据应用里value node和model node的转换
- 动态修改dom node的两种方法性能比较
- Node.js(二)node 核心模块 fs、HTTP模块、express框架
- Node.js(一)概述、全局对象/函数、node各模块使用介绍
- node_exporter 自定义监控