成为优秀 Node.js 程序员的10个习惯
JavaScript出现近二十年了,但由于其有些问题不能解决,使得像Python和Ruby这一类的语言很吸引人,这些问题包括命令行接口、交互式开发环境、包的管理和没有一个有组织开源社区等。幸亏Node.js和npm,使得JavaScript的现状有了明显改善。网络程序员正使用强大的新工具,这使他们可以做他们想到的任何事情。
下面是一个让你的快乐和让你程序很好工作的小技巧清单。
1、用npm init开始你的程序
npm包括一个用init命令创建一个package.json文件的过程。尽管你也许很熟悉package.json极其属性,但是npm init仍然是一个很方便的方法让你的新的节点应用程序(node app)或模块开始走上正轨。它为你智能地进行默认设置,就像从其父目录推断模块名称,从~/.npmrc中读取作者信息,或者是使用你的git设置来确定repository。
mkdir my-node-app
cd my-node-app
npm init
2、声明所有的依赖关系
每次你在本地安装一个模块,使用--save或者是--save-dev是一个很好的习惯。这些标记把给定的模块增加到你的package.json的dependencies或devDependencies的列表中,并且它会使用一个合理的默认的semver range。
npm install domready --save
注意现在npm使用的caret-style semver ranges :
"dependencies": {
"domready": "^1.0.4"
}
3、指定一个启动脚本
在package.json中为scripts.start设置一个值以便允许你在命令行中用npm start来打开你的app。这是一个很好的要去遵守的惯例,这样这可以让任何的节点开发人员来拷贝你的app并没有任何问题地运行。
Bonus:如果你在你的package.json中定义了scripts.start,那么你就不需要Procfile了。正如web process使用npm start时Procfile将自动地被创建出来。
这有一个打开script的例子
"scripts": {
"start": "node index.js"
}
4、指定一个测试脚本
就像你团队中任何人都应该能运行你的程序一样,他们也应该都能测试它。在package.json 中的scripts.test字段是用来指定一个脚本来运行测试的。如果你正在使用如mocha一类的东西来进行测试,请确保在package.json中包含它,并且要指明这是你本地项目的字节文件而不是已经发布的mocha。
"scripts": {
"test": "mocha"
}
5、避免代码的依赖关系
许多节点app使用依赖于C的npm模式,像bson、ws、和hiredis,他们必须为HeroKu的64位Linux系统架构重新编译。这个编辑编译过程很费时。为了使这个过程尽可能快,下载过和编译后HeroKu在节点建立缓存以便在后续使用中被重复使用。这个缓存意味着占用更少的网络流量进行更少的编译。忽略node_modules也是npm模块作者推荐的做法。
echo node_modules >> .gitignore
6、使用环境变量配置npm
来自npm配置文档:
任何以npm_config_开始的环境变量将被解释成一个配置参数。例如,把npm_config_foo=bar放在你的环境变量中将把foo放到bar的配置参数中。任何没有被初始化的环境变量将被设置成true。配置值不区分大小写,因此NPM_CONFIG_FOO=bar也能同样的工作。
正如最近被改变的一样,在所有的HeroKu框架中app环境变量设置都是有效地。这种改变使得HeroKu的节点使用者可以控制他们的npm的配置,并且不需要改变他们的程序代码。第七个习惯是一个极好的实例。
7、带着你自己的npm注册表
最近几年公开的npm注册增长的很快,但这伴随着一些不稳定因素。结果很多的节点使用者正寻找可替换的办法,为了同时提高开发周期开发稳定性,或者是为了建立自己的私人节点模块。Nodejitsu和Gemfury提供付过费的私人注册表,并且有一些免费的替代品,例如Mozilla's read-only S3/CloudFront mirror和Maciej Ma?ecki's European mirror.配置你的Heroku节点应用程序来使用一个自定义注册中心是很容易的:
heroku config:set npm_config_registry=http://registry.npmjs
8、跟踪过时的依赖关系
如果你已经从事编程很久了,你可能是dedependency hell。幸运的是Node.js和npm都会对改变进行说明,通过Semantic Versioning Specification。在这种情况下,版本号和他们改变了的实现方式能传达出从一个版本到另一个版本底层是如何实现的。
npm有一个鲜为人知的命令outdated。使用npmupdate,这是一个很好的工具来检测你的app的依赖关系是否已经过时并且需要升级。
cd my-node-app
npm outdated
Package Current Wanted Latest Location
------- ------- ------ ------ --------
express 3.4.8 3.4.8 4.0.0-rc2 express
jade 1.1.5 1.1.5 1.3.0 jade
cors 2.1.1 2.1.1 2.2.0 cors
jade 0.26.3 0.26.3 1.3.0 mocha > jade
diff 1.0.7 1.0.7 1.0.8 mocha > diff
glob 3.2.3 3.2.3 3.2.9 mocha > glob
commander 2.0.0 2.0.0 2.1.0 mocha > commander
如果你工作在开源的节点app或模式上,检查david-dm、NodeICO、和shields.io这三大服务,它提供图形包,你能使用它们显示你的工程的README或者是website。
9、使用npm脚本运行自定义构建步骤
随着npm的发展,出现了自动开发构建过程。Grunt是迄今为止世界上最流行的构建工具,但是新工具如gulp.js和plain old npm scripts也同样吸引具有吸引力。
当你部署一个节点qpp到HeroKu上,执行npm install --production命令来确保你的app的npm 依赖包被下载和安装。这个命令有时也可以做其他的事情。它运行你在package.json文件中定义的npm script hooks,例如preinstall和postintall。下面是一个例子:
{
"name": "my-node-app",
"version": "1.2.3",
"scripts": {
"preinstall": "echo here it comes!",
"postinstall": "echo there it goes!",
"start": "node index.js",
"test": "tap test/*.js"
}
}
这些脚本可以内联bash命令,或者是参考command-line executables。你也可以参考其他的npm 脚本:
{
"scripts": {
"postinstall": "npm run build && npm run rejoice",
"build": "grunt",
"rejoice": "echo yay!",
"start": "node index.js"
}
}
10、尝试新的东西
Harmony是ES6工作集名字,下一个ECMAScript语言的版本就是人们熟知的JavaScript。Harmony给JavaScript带来了大量的令人兴奋的功能,其中有许多在新一点的版本中已经可以使用了。
Harmony实现了许多新功能像block scoping、generators、proxies和weak maps等。
为了在你的节点app中实现新功能,尤其是一个新版本像0.11.x,在你的启动脚本中加入--harmony吧:
{
"scripts": {
"start": "node --harmony index.js"
},
"engines": {
"node": "0.11.x"
}
}
11、Browserify
客户端的JavaScript有一个“面条式代码”的遗留问题,但语言本身不是这样的。缺乏正当的依赖管理使得我们陷入jQuery-plugin copy-pasta这种状态长达数年。多亏了npm,我们正在进入前端复兴:npm注册的疯狂,在浏览器中模式设计的盛行是惊人的。
Browserify是一个了不起的工具,使得节点设计模式能在浏览器中工作。如果你是一个前端开发人员,browserify可以改变你的生活。也许不是今天,也许不是明天,但就在不远的将来了。开始使用browserify吧,查看文章。
你的习惯是什么呢?
无论你是否已经在node上编程一段时间了或者是仅仅刚刚开始,都希望你找到有用的方法。如果你有什么好的note习惯要分享,用#node_habits作为标签写文章吧。happy hacking!
译文来自:http://ourjs.com/detail/53272b83cc7e181509000003
本文链接:http://www.cnblogs.com/oooweb/p/10-node-habits.html
成为优秀 Node.js 程序员的10个习惯的更多相关文章
- 能让你成为更优秀程序员的10个C语言资源
能让你成为更优秀程序员的10个C语言资源 本文由 伯乐在线 - archychu 翻译自 mycplus.欢迎加入 技术翻译小组.转载请参见文章末尾处的要求. 一些人觉得编程无聊,一些人觉得它很好玩. ...
- 玩儿转物联网IoT - 在Beagle Bone Black上运行node.js 程序
物联网(IoT)技术方兴未艾,智能手环,智能血压计,智能眼镜甚至智能鞋垫都开始进入我们的生活,各种智能设备层出不穷,世界已经到了一个"人有多大胆,地有多大产"的时代,不玩儿点物联网 ...
- 在Visual Studio上开发Node.js程序
[题外话] 最近准备用Node.js做些东西,于是找找看能否有Visual Studio上的插件以方便开发.结果还真找到了一个,来自微软的Node.js Tools for Visual Studio ...
- 一个优秀windows C++程序员的知识体系
思考一个优秀windows C++ 程序员该有哪些知识,可最终发现什么知识都不能少, 看下图: 除了上面知识,程序员还要不断学习, 保持对新知识的热情. 转自http://www.cppblog.co ...
- 使用events.EventEmitter 控制Node.js 程序执行流程
使用events.EventEmitter 控制Node.js 程序执行流程 标题写的可能也不太对,大家领会精神: Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. ...
- 【转】优秀的Java程序员必须了解GC的工作原理
一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应 ...
- 转:一个优秀windows C++程序员的知识体系
转自:http://www.cppblog.com/weiym/archive/2012/06/10/178287.html.根据自身的经历,觉得作者总结的很好. 思考一个优秀windows C++ ...
- 在Visual Studio 2013 上开发Node.js程序
[题外话] 最近准备用Node.js做些东西,于是找找看能否有Visual Studio上的插件以方便开发.结果还真找到了一个,来自微软的Node.js Tools for Visual Studio ...
- 在Visual Studio上开发Node.js程序(2)——远程调试及发布到Azure
[题外话] 上次介绍了VS上开发Node.js的插件Node.js Tools for Visual Studio(NTVS),其提供了非常方便的开发和调试功能,当然很多情况下由于平台限制等原因需要在 ...
随机推荐
- alpha8/10
队名:Boy Next Door 燃尽图 晗(组长) 今日完成 和队友讨论alpha版的最终界面. 明日工作 确定alpha版既定功能的正常使用. 还剩下哪些任务 账号绑定功能以及账单信息的下载. 困 ...
- 软工实践团队展示——WorldElite
软工实践团队展示--WorldElite 本次作业链接 团队成员 031602636许舒玲(组长) 031602237吴杰婷 031602634吴志鸿 081600107傅滨 031602220雷博浩 ...
- 遍历frame中的表单:
遍历frame中的表单: public void table1() { // 查找frame List<WebElement> iframes = driver.findElements( ...
- oracle 关于表数据delete 后如何恢复
今天在PL/SQL中操作不小心删掉了某个表的部分数据,这可吓坏了本猿:于是悄悄的打开电脑,赶紧找度娘帮忙.经过度娘的小爬虫帮助,几分钟就把数据恢复了. 那么表数据delete掉后怎么恢复呢? 用fla ...
- 零拷贝Zero-Copy(NIO)
介绍 Java 的zero copy多在网络应用程序中使用.Java的libaries在linux和unix中支持zero copy,关键的api是java.nio.channel.FileChann ...
- Fiddler绕过前端直接和后台进行交互
测试需求:有一个功能,允许用钻石兑换金币,假设1钻石=1金币,前端控制一次至少兑换10个,最多100个,后台不做验证. 测试方案:输入10,也就是告诉前端我要兑换10个金币,等前端验证通过之后,截取要 ...
- 【移动端debug-2】Flexbox在移动端的兼容实践
最近在项目中用到了flexbox,总结一下使用心得. 一.什么是flexbox,干嘛使的? 曾几何时,我们特别希望能像word一样,在排版时有个分散对齐选项(平均分配子元素宽度)这样我就可以任意在父元 ...
- 【Quartz.NET】Quartz.NET 入门
概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了 ...
- 笔记-自己看Day20-待续
1. 搭建环境 1)注释掉csrf 2)配置模板路径 'DIRS': [os.path.join(BASE_DIR,'templates')], # BASE_DIR,代指当前目录. 3)配置静态文 ...
- 洛谷P1268 树的重量 【构造 + 枚举】
题目描述 树可以用来表示物种之间的进化关系.一棵"进化树"是一个带边权的树,其叶节点表示一个物种,两个叶节点之间的距离表示两个物种的差异.现在,一个重要的问题是,根据物种之间的距离 ...