近二十年来,JavaScript一直在不断进化和发展,逐渐弥补了与其他流行编程语言如Python和Ruby之间的差距。凭借命令行界面、REPL、包管理器以及活跃的开源社区,JavaScript现已成为Web开发领域的强大工具。而Node.js和npm的出现,更是让JavaScript如虎添翼,为Web开发者提供了强大的新工具,激发了他们的创造力。
以下是一些关于Node.js和npm的使用提示和技巧,帮助你和你的Node程序保持高效和快乐:
1. 使用npm init开始新项目:
通过运行npm的init命令,你可以轻松创建package.json文件。即便你已经熟悉package.json及其属性,npm init也能帮助你快速将新程序或模块引入正轨。它可以智能地为你设置默认值,如模块名、创作者信息和代码库设置。
2. 声明所有依赖项:
在安装模块到项目本地时,使用--save(或--save-dev)是个好习惯。这些选项会将指定的模块添加到package.json的dependencies(或devDependencies)列表中,并使用合理的semver范围。例如,使用npm install domready --save安装模块后,在package.json文件中将出现类似以下内容的条目:"domready": "^1.0.4"。
3. 指定启动脚本:
在package.json中设置scripts.start,可以让你通过npm start命令轻松启动程序。这对于其他开发者克隆你的程序时非常有用,他们无需猜测如何运行程序。如果你已经在package.json中定义了scripts.start,你就不需要Procfile了(Heroku平台使用Procfile来声明在程序dynos上运行的命令)。使用npm start会自动创建一个作为web进程的Procfile。
4. 指定测试脚本:
确保团队中的每个成员都能测试和运行程序是非常重要的。在package.json中的scripts.test字段用于指定运行测试套件的脚本。如果你使用mocha等测试工具,请确保将其包含在package.json的devDependencies中,并指向项目本地安装的文件。
5. 不要将依赖项放在源码的版本控制中:
许多Node程序使用的npm模块包含C语言编写的依赖项,这些依赖项必须在Heroku的64位Linux架构下进行编译。为了提高构建过程的效率,Heroku的node buildpack会缓存下载和编译后的依赖项。忽略node_modules目录是推荐的npm实践。将node_modules目录添加到.gitignore文件中,以避免将其纳入版本控制。
6. 使用环境变量配置npm:
所有以npm_config_开头的环境变量都会被解释为配置参数。这使得在Heroku等平台上,你可以通过环境变量控制npm配置,无需修改程序代码。这一功能为开发者提供了更大的灵活性。
7. 携带自己的npm注册表:
随着公共npm注册中心的快速发展,偶尔会出现不稳定的情况。为了保障项目的稳定性和可靠性,你可以考虑使用私有npm注册表来管理你的项目依赖。这样,即使公共npm注册中心出现问题,你的项目也能继续正常运行。
遵循这些提示和技巧,你将能够更高效地开发Node.js应用程序,并与团队其他成员更好地协作。这些实践也有助于提高项目的可维护性和可靠性。随着Node.js和npm生态系统的不断发展,越来越多的node用户开始寻求公共注册中心之外的解决方案。他们可能是出于在开发和构建过程中对速度和稳定性的考虑,或是需要放置私有的node模块。
近期,市场上涌现了多个可供选择的npm注册中心。Nodejitsu和Gemfury提供了收费的私有注册中心服务,也有一些免费的选项,例如Mozilla的只读S3/CloudFront镜像以及Maciej Ma?ecki的欧洲镜像。
对于Heroku上的node程序,配置使用定制注册中心非常简单。例如,你可以通过以下命令轻松设置Heroku上的npm配置注册表:
`heroku config:set npm_config_registry=
当你长时间编程时,可能会遇到依赖项过期的问题。幸运的是,Node.js和npm接纳了语义化版本管理规范(semver),这有助于建立一个健全的依赖项管理策略。npm有一个鲜为人知的命令“outdated”,它可以与npm update结合使用,帮助你找出哪些依赖项已经过期并需要更新。
如果你的node程序或模块是开源的,可以考虑使用david-dm、NodeICO和shields.io等服务。这些服务允许你通过图片徽章在项目的README或网站上显示生动的依赖信息。例如:
```plaintext
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 更新提示信息展示等更多内容...
```
随着npm生态系统的持续增长,开发和构建过程的自动化选择也随之增长。虽然Grunt在node世界中仍然非常流行,但新的工具如gulp.js以及普通的旧式npm脚本也因其轻量级而受到欢迎。在部署node程序时,你可以使用npm脚本来运行定制的构建步骤。例如,在package.json文件中定义的脚本可以是行内bash命令或指向可执行命令行文件的路径。一个简单的示例如下:
```json
{
"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" // 测试命令
}
}
探索Node.js的新领域:Harmony的到来与Browserify的魅力
随着技术的飞速发展,JavaScript的ECMAScript下一版本——ES6 Harmony,给开发者带来了振奋人心的全新体验。Harmony赋予了JavaScript众多引人注目的新特性,其中许多已经在最新版本的Node中得以应用。
想象一下,你可以使用块作用域、生成器、代理和弱映射等强大的工具来增强你的Node程序。但要启用Harmony的这些特性,你需要一个较新的Node引擎,比如版本0.11.x,并在启动脚本中设置--harmony选项。
对于前端开发者来说,Browserify是一个改变游戏规则的工具。它使得Node模块能够在浏览器中无缝运行,结束了jQuery插件的复制粘贴时代。在npm的帮助下,我们迎来了前端开发的繁荣时期,Browserify便是这其中的璀璨明珠。如果你想开启Browserify的旅程,不妨参考一些专业文章,它们将为你提供详细的指南。
每一个开发者都有自己独特的习惯和技巧。无论你是Node.js的老手还是新手,我们都希望你能从这篇文章中获得启示和帮助。如果你有一些(积极的)Node习惯想要分享,欢迎你在推特上带上node_habits标签发表你的见解。让我们一起分享、学习和成长!
本文的灵感来源于Zeke Sikelianos的原创文章《Node.js v0.12的新特性——单进程运行多个实例》。经过深入理解和重新构思,我们为你带来了这篇内容丰富、风格生动的文章。如果你对原文或本文有任何疑问,欢迎通过 |