原文链接:http://blog.csdn.net/zeping891103/article/details/50786259

原谅原版链接:https://github.com/nwjs/nw.js/wiki/Using-Node-modules

Node.js中有三种模块类型:

1)内部模块(部分Node API)

2)用JavaScript写的第三方模块

3)C/C++插件的第三方模块

这些所有的模块类型,都在会在node-webkit中使用到。你可以在Node's wiki中找到很多这方面的资料和开源代码。

https://github.com/nodejs/node-v0.x-archive/wiki/Modules

https://www.npmjs.com/

(一)Internal modules(内部模块)

内部模块的Node.js同样可以在node-webkit中直接使用,详细请查看Node.js的API:

https://nodejs.org/docs/latest/api/

例如,你可以使用var fs = require('fs')直接启动Node.js的File System的API:

https://nodejs.org/docs/latest/api/fs.html

例如,你可以直接使用 the process 模块(没有任何require(....))。然而,建议使用Node.js的API尽量使用require(....)语句来调用,如the process 模块使用为require(process)。

(注):当前,Node.js API 和在node-webkit的Node.js还是有些区别的,可以参考:

https://github.com/nwjs/nw.js/wiki/Changes-related-to-node

(注):Node.js API参考如下:

https://nodejs.org/docs/latest/api/

(二)3rd party JavaScript modules(用JavaScript写的第三方模块)

如果第三方模块用纯JavaScript写,即不包含任何C/C++插件代码,那么这个模块也node-webkit中同样也可以使用Node内部模块(require(...))。但这里需要重点注意一个问题:

想要使用JavaScript编写的第三方模块,你的应用的根目录必须有一个命名为node_modules的文件夹,该文件夹为node-webkit默认使用JavaScript写的第三方模块使用目录。假设有个第三方JavaScript模块名为a_modules,有两种调用方法:

1)如果使用require(a_modules)的方法调用,则无需添加任何导入语句。

2)如果使用像jQuery的方法调用,如a_modules.(...),则需要添加导入语句<script src="..."> 。

下面我们主要介绍第一种调用情况,因为该调用方法可以很好地隐藏了调用的相对地址,而且会更加便捷。

(1)将已经嵌入到node-webkit的内部模块代码获取至源码根目录的node_modules文件夹

这种方法可以让开发者阅读到内部模块的源码及对其进行扩展。下面以内部模块之一的async为例。正常情况下,我们在无需添加导入语句,即可使用async,只需调用如下语句:

  1. var async = require('async');

下面我们将介绍如何获取async的类库源码,以下为Windows系统环境为例:

只需调用命令行即可

  1. cd /path/to/your/app
  2. npm install async

这样你就可以获取该类库源码,源码位置在你的项目根目录node_modules的文件夹

  1. .
  2. ./package.json
  3. ./index.html
  4. ./node_modules
  5. ./node_modules/async
  6. ./node_modules/async/.gitmodules
  7. ./node_modules/async/package.json
  8. ./node_modules/async/Makefile
  9. ./node_modules/async/LICENSE
  10. ./node_modules/async/README.md
  11. ./node_modules/async/.npmignore
  12. ./node_modules/async/lib
  13. ./node_modules/async/lib/async.js
  14. ./node_modules/async/index.js

这时候你就可以查阅并扩展async模块。

(注):博主不建议随意扩展官方已提供的内部模块,但可以扩充内部模块。

(2)使用第三方或自己编写的类库,扩充内部模块。

假设你有一个类库yy库,你想在你的应用中可以使用require(yy)的方法进行调用,内部扩充了一个yy库,该如何做呢?

1)在你的项目根目录下新建文件夹node_modules,在该文件夹中新建yy文件夹,作为你调用的yy库的地址。

dist目录和lib目录下的yy.js就是你要编写的yy库的源码文件,而yy库下package.json文件则是yy库的配置文件。

2)yy.js编写的代码格式如下:

  1. (function() {
  2. var yy = {};
  3. yy.hello = function() {
  4. return "hello";
  5. };
  6. // Establish the root object, `window` (`self`) in the browser, `global`
  7. // on the server, or `this` in some virtual machines. We use `self`
  8. // instead of `window` for `WebWorker` support.
  9. var root = typeof self === 'object' && self.self === self && self ||
  10. typeof global === 'object' && global.global === global && global ||
  11. this;
  12. // Node.js
  13. if (typeof module === 'object' && module.exports) {
  14. module.exports = yy;
  15. }
  16. // AMD / RequireJS
  17. else if (typeof define === 'function' && define.amd) {
  18. define([], function() {
  19. return yy;
  20. });
  21. }
  22. // included directly via <script> tag
  23. else {
  24. root.yy = yy;
  25. }
  26. }());

3)yy库下package.json文件内容如下:

  1. {
  2. "name": "yy",
  3. "description": "yy lib",
  4. "main": "lib/yy.js",
  5. "files": [
  6. "lib",
  7. "dist/yy.js"
  8. ]
  9. }

这样你就可以在你的应用中使用yy库

  1. <script>
  2. var yy = require('yy');
  3. console.log(yy.hello());
  4. </script>

(三)3rd party modules with C/C++ addons(C/C++插件的第三方模块)

这块内容较为复杂,对于一般的开发者也比较少用,同时由于博主对C/C++不是很熟悉,待有空时重新捡起C/C++,再做补充。如需要了解的开发者仍可以阅读如下地址:

https://github.com/nwjs/nw.js/wiki/Using-Node-modules

nw.js node-webkit系列(15)如何使用内部模块和第三方模块进行开发的更多相关文章

  1. 05-Node.js学习笔记-第三方模块

    5.1什么是第三方模块 别人写好的,具有特定功能的,我们能直接使用的模块即第三方模块,由于第三方模块通常都是由多个文件组成并且被放置在一个文件夹中,所以又名包. 第三方模块有两种存在形式 以js文件的 ...

  2. node webkit (nw.js) 无法调试的结局方案之一

    之前做过nw项目,当时主要内容是由别人做的!过后回到家中,自己研究了下这方面.结果发现我自己写的nw 客户端不可以调试!在网上各种找办法,没找到,深感绝望,突然看到 (https://github.c ...

  3. nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞

    第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Win ...

  4. nw.js桌面程序自动更新(node.js表白记)

    Hello Google Node.js 一个基于Google V8 的JavaScript引擎. 一个伟大的端至端语言,或许我对你的热爱源自于web这门极富情感的技术吧! 注: 光阴似水,人生若梦, ...

  5. NW.js安装原生node模块node-printer控制打印机

    1.安装原生node模块 #全局安装nw-gyp npm install -g nw-gyp #设置目标NW.js版本 set npm_config_target=0.31.4 #设置构建架构,ia3 ...

  6. 系列文章--Node.js学习笔记系列

    Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学 ...

  7. 用Node开发桌面应用:NW.js和Electron

    NW.js和Electron对比:[http://tangiblejs.com/posts/nw-js-electron-compared] NW.js:[https://nwjs.io/] Elec ...

  8. 使用NW.js封装微信公众号菜单编辑器为桌面应用

    开发微信公众号的朋友都会遇到一个常见的需求就是修改自定义菜单,如果每个人都去开发这个不经常使用的功能确实有点浪费时间.前段时间在github上找到一个仿企业号的菜单编辑界面,结合微信的C# SDK开发 ...

  9. 用node-webkit(NW.js)创建桌面程序

    以往写windows桌面程序需要用MFC.C#之类的技术,那么如果你只会web开发技术呢?或者说你有一个网站,但是你想把你的网站打包成一个桌面应用程序,该如何做呢? 答案就是用node-webkit这 ...

随机推荐

  1. 2.3AutoEncoder

    AutoEncoder是包含一个压缩和解压缩的过程,属于一种无监督学习的降维技术. 神经网络接受大量信息,有时候接受的数据达到上千万,可以通过压缩 提取原图片最具有代表性的信息,压缩输入的信息量,在将 ...

  2. Tarjan-LCA算法小记

    Tarjan-LCA算法是一种离线算法. 算法描述: DFS遍历每个节点,对于遍历到的当前节点u: ①建立以u为代表元素的集合. ②遍历与u相连的节点v,如果没有被访问过,对于v使用Tarjan-LC ...

  3. Chainer的初步学习

    人们都说Chainer是一块非常灵活you要用的框架,今天接着项目里面的应用,初步接触一下,涨涨姿势,直接上源码吧,看着好理解.其实跟Tensorflow等其他框架都是一个套路,个人感觉更简洁了. & ...

  4. ldapsearch使用

    参数 用途 -? 打印关于使用 ldapsearch 的帮助. -a deref 指定别名反向引用.请输入 never.always.search 或 find.如果不使用此参数,缺省为 never. ...

  5. $obj

    <?php $obj = new stdClass(); for($w=0; $w<10; $w++){ $obj->$w= $w.'w'; $str = $w.'we'; $obj ...

  6. veterbi

    https://www.zhihu.com/question/20136144 作者:知乎用户链接:https://www.zhihu.com/question/20136144/answer/372 ...

  7. PL/SQL常用表达式及举例(一)

    IF 判断条件 THEN 满足条件时执行语句 END IF; DECLARE v_countResult NUMBER; BEGIN SELECT COUNT(empno) INTO v_countR ...

  8. SEO工作中如何增加用户体验?10个细节要注意!

    我们一直在做的网站SEO工作,如果你认为它的目的仅仅是为了提高网站的排名那就错了,还有一个同样很重要的方面就是增加用户的体验,使网站更加符合网民的浏览习惯,需要做到这个方面的成功我们有10个小细节是需 ...

  9. Java中String, StringBuilder和StringBuffer

    Java中常用来处理字符串的类有三个: String, StringBuffer和StringBuilder. 区别 三者都继承自CharSequence接口, 首先说明三者间主要区别 String字 ...

  10. webpack笔记一

    gulp和grunt都以task来运行不同的命令,而看webpack相关文档都是webpack都是module.下面是一个简单的demo 一.目录解构 二.webpack.config.js文件 co ...