JavaScript出现近二十年了,但由于其有些问题不能解决,使得像PythonRuby这一类的语言很吸引人,这些问题包括命令行接口、交互式开发环境、包的管理和没有一个有组织开源社区等。幸亏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注册增长的很快,但这伴随着一些不稳定因素。结果很多的节点使用者正寻找可替换的办法,为了同时提高开发周期开发稳定性,或者是为了建立自己的私人节点模块。NodejitsuGemfury提供付过费的私人注册表,并且有一些免费的替代品,例如Mozilla's read-only S3/CloudFront mirrorMaciej 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-dmNodeICO、和shields.io这三大服务,它提供图形包,你能使用它们显示你的工程的README或者是website。

9、使用npm脚本运行自定义构建步骤

随着npm的发展,出现了自动开发构建过程。Grunt是迄今为止世界上最流行的构建工具,但是新工具如gulp.jsplain 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 scopinggeneratorsproxiesweak 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个习惯的更多相关文章

  1. 能让你成为更优秀程序员的10个C语言资源

    能让你成为更优秀程序员的10个C语言资源 本文由 伯乐在线 - archychu 翻译自 mycplus.欢迎加入 技术翻译小组.转载请参见文章末尾处的要求. 一些人觉得编程无聊,一些人觉得它很好玩. ...

  2. 玩儿转物联网IoT - 在Beagle Bone Black上运行node.js 程序

    物联网(IoT)技术方兴未艾,智能手环,智能血压计,智能眼镜甚至智能鞋垫都开始进入我们的生活,各种智能设备层出不穷,世界已经到了一个"人有多大胆,地有多大产"的时代,不玩儿点物联网 ...

  3. 在Visual Studio上开发Node.js程序

    [题外话] 最近准备用Node.js做些东西,于是找找看能否有Visual Studio上的插件以方便开发.结果还真找到了一个,来自微软的Node.js Tools for Visual Studio ...

  4. 一个优秀windows C++程序员的知识体系

    思考一个优秀windows C++ 程序员该有哪些知识,可最终发现什么知识都不能少, 看下图: 除了上面知识,程序员还要不断学习, 保持对新知识的热情. 转自http://www.cppblog.co ...

  5. 使用events.EventEmitter 控制Node.js 程序执行流程

    使用events.EventEmitter 控制Node.js 程序执行流程 标题写的可能也不太对,大家领会精神: Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. ...

  6. 【转】优秀的Java程序员必须了解GC的工作原理

    一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应 ...

  7. 转:一个优秀windows C++程序员的知识体系

    转自:http://www.cppblog.com/weiym/archive/2012/06/10/178287.html.根据自身的经历,觉得作者总结的很好. 思考一个优秀windows C++ ...

  8. 在Visual Studio 2013 上开发Node.js程序

    [题外话] 最近准备用Node.js做些东西,于是找找看能否有Visual Studio上的插件以方便开发.结果还真找到了一个,来自微软的Node.js Tools for Visual Studio ...

  9. 在Visual Studio上开发Node.js程序(2)——远程调试及发布到Azure

    [题外话] 上次介绍了VS上开发Node.js的插件Node.js Tools for Visual Studio(NTVS),其提供了非常方便的开发和调试功能,当然很多情况下由于平台限制等原因需要在 ...

随机推荐

  1. CocoaPods 创建私有仓库

    这里有个坑首先需要注意,创建私有cocoapods仓库需要两个git仓库,即代码仓库,Specs文件仓库. 一.创建私有库 1.创建自己源码仓库,假设是A.git; 2.对A仓库: git add . ...

  2. 新浪 ip 地址库

    API地址:http://int.dpool.sina.com.cn/iplookup/iplookup.php 帮助 1 2 3 4 5 6 7 8 function get_location($i ...

  3. 【C++】不要在构造函数或析构函数内调用虚函数

    这个问题来自于<Effective C++>条款9:永远不要在构造函数或析构函数中调用虚函数 . 假设有如下代码: class Transaction {// 所有交易的基类 public ...

  4. Css实现拖动效果

    效果如下,可以拖动滑块,数字显示的是离左侧距离:

  5. 对Spark2.2.0文档的学习3-Spark Programming Guide

    Spark Programming Guide Link:http://spark.apache.org/docs/2.2.0/rdd-programming-guide.html 每个Spark A ...

  6. 【poj2154】Color Polya定理+欧拉函数

    题目描述 $T$ 组询问,用 $n$ 种颜色去染 $n$ 个点的环,旋转后相同视为同构.求不同构的环的个数模 $p$ 的结果. $T\le 3500,n\le 10^9,p\le 30000$ . 题 ...

  7. 基于ORM实现用户登录

    1. 与数据库中的数据进行比较,检验用户名和密码是否正确. 2. 拿到的是QuerySet类型,类似于一个列表.验证成功/失败,返回到不同的页面. u = request.POST.get('user ...

  8. Implement Queue by Two Stacks

    As the title described, you should only use two stacks to implement a queue's actions. The queue sho ...

  9. BZOJ1367 [Baltic2004]sequence 【左偏树】

    题目链接 BZOJ1367 题解 又是一道神题,, 我们考虑一些简单的情况: 我们先假设\(b_i\)单调不降,而不是递增 对于递增序列\(\{a_i\}\),显然答案\(\{b_i\}\)满足\(b ...

  10. 洛谷U14200 Changing 题解 【杨辉三角】

    题目描述 有nnn盏灯环形排列,顺时针依次标号为1⋯n1\cdots n1⋯n.初始时刻为000,初始时刻第iii盏灯的亮灭aia_iai​给定,000表示灭,111表示亮.下一时刻每盏灯的亮灭取决于 ...