Node.js 最强大的一点就是“跨平台”。只要在编码时稍微注意一下,你的代码就通吃 Windows、Linux 和 OSX 平台。
Node.js 是跨平台的,也就是说它能运行在 Windows、OSX 和 Linux 平台上。很多 Node.js 开发者都是在 OSX 上做开发的,然后再将代码部署到 Linux 服务器上。由于 OSX 和 Linux 都是基于 Unix 的,因此两者共性很多。Windows 也是 Node.js 官方支持的平台,只要你通过正确的方式写代码,就能在各个平台上毫无压力的跑起来。
路径
为 Node.js 写代码,碰到的最大的问题就是“路径”。Node.js 平台其实已经做了很多工作帮你屏蔽平台间的差异,但是,如果你以错误的方式写代码的话,在 Windows 平台上就会遇到大麻烦。
比如,你想通过字符串拼接的方式生成一个路径:
var foo = 'foo';
var bar = 'bar';
var filePath = foo + '/' + bar + '/';
在 OSX 和 Linux 平台上运行的话毫无压力,但是 Windows 平台的路径分隔符是 \\
,所以你必死无疑!
其实,Node.js 自带的 path 模块已经给出了现成的工具用于处理跨平台的路径操作。比如,我们可以使用 path.join
函数:
var filePath = path.join(foo, bar);
// 'foo/bar' on OSX and Linux
// 'foo\\bar' on Windows
使用 path.resolve
在文件系统中移动
path.resolve
提供了在文件系统中到处移动的功能,并且能够提供跨平台兼容性。根据文档中的说明,你可以将这个函数看作是一系列的 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
文件中定义可执行的脚本
假如你有这样一个可执行的脚本 -- npm-postinstall
-- 放在 bin
目录下:
#!/usr/bin/env node
console.log('node modules installed!');
如果你在 package.json
文件中定义了一个可执行的脚本,你会发现 Windows 不鸟你。
{
"name": "some-app",
"version": "0.0.1",
"authors": [
"George Ornbo <george@shapeshed.com>",
],
"scripts": {
"postinstall": "./bin/npm-postinstall"
}
}
解决办法是使用 node 来执行脚本。
{
"name": "some-app",
"version": "0.0.1",
"authors": [
"George Ornbo <george@shapeshed.com>",
],
"scripts": {
"postinstall": "node bin/npm-postinstall"
}
}
上面的方式就能在所有平台上运行了。
使用 os
模块
如果你的代码需要与系统平台有更多的沟通,请仔细看看 Node.js 中的 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 平台的最大优势就是跨平台开发、跨平台部署、跨平台运行。只要稍加运用上面的知识就能轻松的开发出跨平台的代码。