在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
,经典的DOMXMLHttpRequest
,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>