快乐Node码农的11个习惯

从问世到现在将近20年,JavaScript一直缺乏其它有吸引力的编程语言,比如Python和Ruby,的很多优点:命令行界面,REPL,包管理器,以及组织良好的开源社区。感谢Node.js和npm,现如今的JavaScript鸟枪换炮了。Web开发者有了强大的新工具,接下来就看他们的想象力了。

下面这个提示和技巧清单,能让你和你的node程序保持快乐。

1. 用npm init开始新项目

npm有个init命令,可以引导你完成创建package.json文件的过程。即便你非常熟悉package.json和它的属性,也可以把npm init当作将你的新程序或模块导入正轨的简便办法。 它可以聪明地为你设置默认值,比如通过上层目录的名称推断模块名,从~/.npmrc中读取创作者的信息,以及用你的git设置确定代码库。


  1. mkdir my-node-app
  2. cd my-node-app
  3. npm init

2.声明所有依赖项

在将模块安装到项目本地时坚持使用--save (或 --save-dev)是个好习惯。这些选项会将指定的模块添加到package.json的dependencies(或devDependencies)清单中,并使用合理的默认semver范围


  1. npm install domready --save

注意,现在npm使用插入符风格的semver范围


  1. "dependencies": {
  2. "domready": "^1.0.4"
  3. }

3.指定启动脚本

在package.json中设定scripts.start,你就可以在命令行中用npm start启动程序了。这个非常方便,因为克隆了你的程序的其他node开发人员不用猜就能轻松运行它。

额外奖励:如果在package.json中定义了scripts.start,你就不需要Procfile了(Heroku平台用Procfile来声明在你程序的dynos上运行什么命令)。使用npm start会自动创建一个作为web进程的Procfile。

这里有个启动脚本示例:


  1. "scripts": {
  2. "start": "node index.js"
  3. }

4.指定测试脚本

就像团队中的所有人都应该可以运行程序一样,他们也应该可以测试它。package.json中的scripts.test就是用来指定运行测试套件的脚本的。如果你用mocha之类的东西运行测试,一定要确保把它包含在package.json里的devDependencies中,并且指向安装在你项目本地的文件,而不是全局安装的mocha:


  1. "scripts": {
  2. "test": "mocha"
  3. }

5.不要把依赖项放在源码的版本控制中

很多node程序使用的npm模块带有C语言写的依赖项,比如bson、ws和hiredis,这些依赖项必须在Heroku的64位Linux架构下进行编译。编译过程可能非常耗时。为了让构建过程尽可能的快,Heroku的node buildpack在下载和编译完依赖项后会缓存它们,以便在后续部署中重用。这个缓存是为了降低网络流量并减少编译次数。

忽略node_modules目录也是模块创作者推荐的npm实践。应用程序和模块之间少了一个区别!


  1. echo node_modules >> .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注册中心。NodejitsuGemfury提供收费的私有注册中心,此外也有一些免费的,比如Mozilla的只读S3/CloudFront镜像Maciej Małecki的欧洲镜像

在Heroku上配置node程序使用定制注册中心很容易:


  1. heroku config:set npm_config_registry=http://registry.npmjs.eu

8.追踪过期的依赖项

如果你编程的时间足够长,可能已经领教过相依性地狱的厉害了。好在Node.js和npm接纳了semver,即 语义化版本管理规范 ,设置了一个健全的依赖项管理先例。在这个方案下,版本号和它们的变化方式传达的含义涉及到了底层代码,以及从一个版本到下一版本修改了什么。

npm有一个很少有人知道的命令,outdated。它可以跟npm update结合使用,能够找出程序的那些依赖项已经过期了,需要更新:


  1. cd my-node-app
  2. npm outdated
  3.  
  4. Package Current Wanted Latest Location
  5. ------- ------- ------ ------ --------
  6. express 3.4.8 3.4.8 4.0.0-rc2 express
  7. jade 1.1.5 1.1.5 1.3.0 jade
  8. cors 2.1.1 2.1.1 2.2.0 cors
  9. jade 0.26.3 0.26.3 1.3.0 mocha > jade
  10. diff 1.0.7 1.0.7 1.0.8 mocha > diff
  11. glob 3.2.3 3.2.3 3.2.9 mocha > glob
  12. commander 2.0.0 2.0.0 2.1.0 mocha > commander

如果你做的是开源的node程序或模块,可以看看david-dmNodeICOshields.io,你可以用这三个优秀服务所提供的图片徽章在项目的README或网站上显示生动的依赖信息。

9.用npm脚本运行定制的构建步骤

随着npm生态系统的持续增长,开发和构建过程的自动化选择也会随之增长。Grunt是迄今为止node世界中最流行的构建工具,但像gulp.js这种新工具,以及普通的老式npm脚本也因为较轻的负载受到欢迎。

在你把node程序部署到Heroku上时,要运行npm install --production命令以确保程序的npm依赖项会被下载下来装上。但那个命令也会做其它事情:它会运行你在package.json文件中定义的所有npm脚本钩子,比如preinstall和postinstall。这里有个样本:


  1. {
  2. "name": "my-node-app",
  3. "version": "1.2.3",
  4. "scripts": {
  5. "preinstall": "echo here it comes!",
  6. "postinstall": "echo there it goes!",
  7. "start": "node index.js",
  8. "test": "tap test/*.js"
  9. }
  10. }

这些脚本可以是行内bash命令,或者也可以指向可执行的命令行文件。你还可以在脚本内引用其他npm脚本:


  1. {
  2. "scripts": {
  3. "postinstall": "npm run build && npm run rejoice",
  4. "build": "grunt",
  5. "rejoice": "echo yay!",
  6. "start": "node index.js"
  7. }
  8. }

10.尝试新东西

ES6,也就是被大众称为JavaScript的ECMAScript语言规范的下一版,其工作名称为Harmony。 Harmony给JavaScript带来了很多振奋人心的新特性,其中很多已经出现在较新版本的node中了。

Harmony实现了很多新特性,比如块作用域生成器代理弱映射等等。

要在你的node程序中启用harmony的特性,需要指定一个比较新的node引擎,比如0.11.x,并在启动脚本中设置--harmony选项:


  1. {
  2. "scripts": {
  3. "start": "node --harmony index.js"
  4. },
  5. "engines": {
  6. "node": "0.11.x"
  7. }
  8. }

11. Browserify

客户端JavaScript有乱如麻团般的遗留代码,但那并不是语言本身的错。由于缺乏合理的依赖项管理工具,让jQuery-插件拷贝-粘帖的黑暗时代延续了好多年。感谢npm,带着我们步入了前端振兴的年代:npm注册中心像野草一样疯长,为浏览器设计的模块也呈现出了惊人的增长势头。

Browserify是一个让node模块可以用在浏览器中的神奇工具。如果你是前端开发人员,browserify将会改变你的人生。可能不是今天,也不是明天,但不会太久。如果你想开始使用browserify,请参阅这些文章

你有哪些习惯?

不管你已经做过一段时间node程序,还是刚刚开始,我们都希望这些小技巧能对你有所帮助。如果你有一些(健康的)node习惯想要跟大家分享,请在发tweet时带上#node_habits标签。编码快乐!

原文发布时间为:2014-04-23

本文来自合作伙伴“Linux中国”

时间: 2024-09-23 10:28:18

快乐Node码农的11个习惯的相关文章

快乐Node码农的十个习惯

从问世到现在将近20年,JavaScript一直缺乏其它有吸引力的编程语言,比如Python和Ruby,的很多优点:命令行界面,REPL,包管理器,以及组织良好的开源社区.感谢Node.js和npm,现如今的JavaScript鸟枪换炮了.Web开发者有了强大的新工具,接下来就看他们的想象力了. 下面这个提示和技巧清单,能让你和你的node程序保持快乐. 1. 用npm init开始新项目 npm有个init命令,可以引导你完成创建package.json文件的过程.即便你非常熟悉package

写给码农们:从业互联网13年 才觉得卖卤菜比找风投上市靠谱

中介交易 SEO诊断 淘宝客 云主机 技术大厅 黑客登场 十多年前的一天晚上,警察突然冲到了我家,把我带到省公安厅录口供开始,我的互联网人生从此拉开了序幕...(PS:肯定你要问为什么要被带走?因为当时高三逆反,反对应试教育,把省招办网站黑了改成了黄色网站,当时我高考的头一天上了当地报纸的头版头条,详见2001年7月6日的<天府早报>和<华西都市报>) 作者:webnetmax123 [黑客二次登场] 懵懵懂懂的我拿到大学会计专业的录取通知书,问我爸:"会(我读的huì)

ThinkPHP3.2.1版本正式发布了,马年码农们的福音

在这个特别的日子里, ThinkPHP3.2.1版本http://www.aliyun.com/zixun/aggregation/18782.html">正式发布了,祝马年码农们元宵节情人节快乐啊^_^ 在继此前发布的3.2.0版本对ThinkPHP的架构作出重大调整之后,ThinkPHP3.2.1版本在修正一些BUG后,着重优化了性能,并提高了 易用性,同时也增加了不少的扩展功能,是一个比3.2.0版本更加 稳定.安全.高效以及易用的版本.强烈推荐升级. [ 更新 ] 相对于3.2.0

月薪3000元的码农到首席架构师的经历

"在微博平台,有幸结识了一帮趣味相投资深码农,离开以后很难再有这么一个团队来成长了--想想都是幸运,成天跟一群这么优秀的人在一起,想变差都不容易." 笔者. 我现在负责熊猫 TV 整体基础架构工作,是一个快 9 年工龄的码农.办公地点在 O2O 宇宙中心--望京 SOHO,附近的伙伴们可以随时约起. 我在 2007 年毕业,和很多同行一样,也是从小公司起步,曾做过 ERP,信息安全,互联网社交平台.游戏平台等,现在工作是直播娱乐平台.写过几年的语言有 Java.C/C++.PHP.Go

担心提前做了码农的大学生

这封信里的信息量很大,包含了不少让IT大学生专业学习无效的想法.由于写书赶进度,第一次迟了十多天才回复.但愿这封信能鼓起他学习的激情.[来信] 贺老师,您好.我现在是个即将挪入大二的学生,我是一个思想上急性子,行动上的慢板拍,在我学了一点C语言的时候,我就想学习如何做项目,看了一点C++,觉得和C语言一样写不出什么的东西,这时候我了解到windows编程,于是硬着头皮去碰了一下win32编程,花了我很多时间,但收效不大,能写一点基本的界面,但由于没有什么相关的基础知识,想学些类似于服务和网络编程

产品经理/码农/设计师的3P战争

前言:这是一个真实发生的故事.在某个产品策划会上,一个PM面对来自内容部门和营销部门同事的会议上,骄傲的说:"根据鳄鱼法则,我们需要做的就是做一款服务于网友的优质产品,来扰动这个封闭的行业,增加大家的活力和竞争力." 坐在场下事不关己的我放下手机,自卑于自己的孤陋寡闻.悄悄打开手机,搜一下才终于明白"鳄鱼法则"指的是如果你一只脚被鳄鱼咬住了,那么不要去挣扎,那样的话会让你连手都没有了.最好的办法是放弃你的脚丫子.而这个产品经理想说的明显是"鲶鱼效应&quo

流着码农的血,为突破理论极限值而生 | 阿里中间件性能挑战赛内部赛全记录

近日,第三届阿里中间件性能挑战赛内部总决赛在西溪园区举行,经过前期线上比赛和现场解题思路答辩,来自阿里云数据库技术团队的资深专家曹伟(鸣嵩)获得本次比赛总冠军并揽得大奖. 线上比赛阶段得分屡创新高,现场解题思路答辩交流活跃,气氛热烈,精彩纷呈的内部赛为今年的中间件性能挑战赛开了一个好头,期待在接下来的外部赛上涌现出更多好成绩和令人耳目一新的工程创新. 作为阿里中间件(Aliware)举办的历史最悠久的工程视角赛事,自举办以来,受到业界工程师和高校技术爱好者的一贯支持和好评.2014年中间件性能挑

一个经验尚浅的码农五年软件开发的一点自我总结,对工作五年的反思~

class="post_content" itemprop="articleBody"> 一位就要换城市(离开北京)+ 换职业(不做开发),去新公司报道的程序猿,最近反思了自己毕业后的这五年工作,记录下五年以来软件开发的一点自我总结,也算是给过来人提点建议,少走点弯路吧-- 08年顶着名校硕士的光环加入了一家非常有名的非软件公司做软件开发,刚开始一切其实都很美好.大外企的各种好在头一年给自己带来了很多光环,当然自己也学到了很多(主要是非技术的东西).可是从第二

从码农到“石榴哥”,路边小摊O2O创业的辛苦与收获

自从去年11月开始,我以一个地铁附近的小仓库.一辆小推车为起点,开始在西二旗周边的IT区域卖石榴汁.从推着小推车转一天.被动等待顾客上门,一直到现在开始做店面.开展营销活动.甚至借用轻应用.微信等移动互联网手段开始了所谓的O2O之路,大半年的时间里,作为一个个体起步的小创业者,从码农转身为卖果汁的石榴哥,在这个过程中,我学到了很多. 一. 要解决的第一个问题:如何建立商家和用户之间的信任 作为一个小的个体创业者,最初选择一个区域来做好创业开端很重要.如果一定要套用"互联网思维",那就是