编写跨平台的Node.js
发布在每天学点javascript2014年3月27日view:7195
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

enter image description here Node.js的一大好处在于它对跨平台编程的支持。你只需要稍加努力,就可以保证你的代码能在Windows,Linux以及OSX系统下运行。

无所不在的跨平台

Node.js是跨平台的,这意味着它可以再Windows,OSX和Linux系统上运行。Node社区的很多程序员都在OSX系统上编写Node的代码,然后将这些代码部署到Linux服务器上。因为Linux和OSX系统都是基于UNIX,两者之间几乎不需要进行什么转换就能够正常运行。对Windows的支持在Node.js中算是第一类公民,如果你想要让你的Node代码可以到处运行的话,除了*nix系统以外,你还需要加入Windows的怀抱。

路径

在解决跨平台问题时,最大的一个问题及时路径。Node贴心的为你解决了大部分的问题,但是如果你用错误的方式编写路径的话,你的代码将无法在Windows下正确运行。

例如,你现在需要连接两个字符串来创建一个路径:

var foo = 'foo';
var bar = 'bar';
var filePath = foo + '/' + bar + '/'; 

这段代码可以再OSX和Windows下良好运行,但是在Windows我们使用的是”\”而不是”/”。这样的做法就错了。

Node中的path模块给了我们在解决跨平台路径问题时所需要的一切工具。例如我们在这里需要用到path.join。

var filePath = path.join(foo, bar);
// 'foo/bar' on OSX and Linux
// 'foo\\bar' on Windows

使用path.resolve遍历文件系统

使用path.resolve方法可以让你在文件系统中自由走动,同时还能够保持跨平台的兼容性。根据Node.js的文档,你可以将这个方法看做是一系列cd命令的集合,并且最后会输出单个路径。

path.resolve('../', '/../', '../')
// '/home' on Linux
// '/Users' on OSX
// 'C:\\Users' on Windows 

使用path.normalize创建可靠的路径

如果你正在做下面的事情

var filePath = '/home/george/../folder/code';

那么你应该使用path.normalize。因为它可以帮助你在不同的平台上展现出相应的正确的路径:

var filePath = path.normalize('/home/george/../folder/code'); 
// '/home/folder/code'

使用path.join连接文件夹名

正如我们在前面连接字符串的例子中看你到底,如果你直接使用字符串连接,会发生一些不好的事情。

如果你需要将路劲连接起来,你需要使用path.join方法。它将为你格式化你的路径:

path.join('foo', '..', 'bar', 'baz/foo');
// 'bar/baz/foo' on OSX and Linux
// 'bar\\baz\\foo' on Windows  

package.json中的脚本

假设你在你的项目的bin文件夹下面有一个叫做npm-postinstall的脚本:

#!/usr/bin/env node
console.log('node modules installed!');

如果你像下面一样在package.json这样定义script字段,你会发现它压根就不能在windows下运行,如果你使用./同时又依赖于一个Node.js shebang的话。

    {
  "name": "some-app",
  "version": "0.0.1",
  "authors": [
    "George Ornbo <george@shapeshed.com>",
  ],
  "scripts": {
    "postinstall": "./bin/npm-postinstall"
  }
}

正确的做法是使用下面的定义:

  "name": "some-app",
  "version": "0.0.1",
  "authors": [
    "George Ornbo <george@shapeshed.com>",
  ],
  "scripts": {
    "postinstall": "node bin/npm-postinstall"
  }
}

这样可以让你的可执行脚本在Window和*nix平台下都正常运行。

使用os模块进行更多的控制

如果你想要针对你的代码运行的平台进行更多控制,你可以使用os模块:

var os = require('os');
os.platform();
// 'linux' on Linux
// 'win32' on Windows 32-bit
// 'win64' on Windows 64-bit
// 'darwin' on OSX 

总结

Node.js的一大好处就是Noide.js可以将你的代码部署到任何的平台下,并且可以在几乎所有的开发平台中运行。你只需要了解一点点相关的知识,你就可以让你的代码在任何平台上正常运行,从而避免了编写“使X兼容X”代码这样无聊的事情。


本文译自Writing cross-platform Node.js,原文地址http://shapeshed.com/writing-cross-platform-node/

如果你觉得本文对你有帮助,请为我提供赞助https://me.alipay.om/jabez128

评论
发表评论
暂无评论
WRITTEN BY
张小俊128
Intern in Baidu mobile search department。认真工作,努力钻研,期待未来更多可能。
TA的新浪微博
PUBLISHED IN
每天学点javascript

javascript进阶级教程,循序渐进掌握javascript

我的收藏