在node-webkit中使用node modules

593 查看

在nodejs中有三种类型的modules:

  • 内部modules(一部分Node API)
  • 用JavaScript写的第三方modules
  • C/C++插件形式的第三方modules

所有这些类型都可以使用在node-webkit.

内部modules:

nodejs的内部(内建)moduels可以直接在node-webkit中使用(需要根据nodejs的文档)。
例如,var fs = require('fs')就可以开始使用文件系统module了。

例如,你可以直接使用process module,而不用任何的require(...)。

然后,在nodejs和node-webkit的API之间也有一些小的改动。

第三方JavaScript modules

如果一个第三方的模块完全是由JavaScript写成(也就是不包含C/C++插件),可以以在Nodejs中使用的方式用在node-webkit中:require('moduleName')。

然而,相对路径的行为依赖于在应用程序中父文件本身是如何使用的(这里的父文件是指require()方法调用所在的文件):

  • 如果父文件也被Node引用(使用require()),那么子文件中的相对路径是相对于其父文件的。
  • 如果父文件被WebKit所引用(使用任何web的技术:经典的DOM window.open(),node-webkit's的Window.open,经典的DOM XMLHttpRequest,JQuery的$.getScript(),HTML<script src="...">元素,等等),子文件的相对路径就是相对于应用程序的根目录。

前述的规则意味着任何模块的子模块在nodejs中的引用方式在node-webkit中可以正常工作。

然而,一般的更聪明的做法是不使用明确的相对路径(以../和./开头)。取而代之,仅仅调用require('modulename')就足够了--------如果这个模块已经放在了应用程序的子目录/node_modules下面。

例如,你可能从npm package安装了一些模块,通过在你的应用程序目录调用npm install modulename(你的应用程序的清单文件所在的目录),因为npm会自动的将这些模块放到子目录/node_modules.

例子:async

这是一个安装async模块的例子:

$ cd /path/to/your/app
$ npm install async

这是整个目录树的文件列表:

$ find .
.
./package.json
./index.html
./node_modules
./node_modules/async
./node_modules/async/.gitmodules
./node_modules/async/package.json
./node_modules/async/Makefile
./node_modules/async/LICENSE
./node_modules/async/README.md
./node_modules/async/.npmignore
./node_modules/async/lib
./node_modules/async/lib/async.js
./node_modules/async/index.js

清单文件看起来是这样:

{
  "name": "nw-demo",
  "main": "index.html"
}

这是index.html:

<html>
<head>
<title>test</title>
<script>
var async=require('async');
</script>
</head>
<body>
test should be here.
</body>
</html>

第三方C/C++插件(暂未用到,省略)