为了加速学习,并且经朋友推荐,还是先换了一本中文教材《Node.js开发指南》继续学习 Node.js。以期减少沟通成本尽快上手。
下面继续以 Tip 形式记录相关要点:
1. Node.js 的 npm
Frankly speaking, 我还没懂 npm 是什么东西(可见我真的太弱了)。但是 Node.js 安装之后,“这个命令”就已经安装上了,在 Windows 下,npm 这个命令也加到环境变量中去了,可以直接使用。目前,我的所知是它可以安装某些包。
2. Supervisor 调试模式
Ok, 有没有觉得在 PHP 下面一改源码就生效,但是到了 Node 上面,每次都要重启 Node 很烦,还怎么做开发?(当然 Node.js 这样做提高了效率,生产状态下绝对是有利的)是吧,不担心,有解法。 用 npm 安装包: 直接在命令行中运行这个(windows 下亲测可用),然后 supervisor 就装上了。
npm install -g supervisor
然后原本运行一个脚本是 node xxx.js
,现在
用supervisor xxx.js
就 ok 了,这种方式打开的调试模式下面,就可以有修改源码重新载入的效果了。
3. Node.js 事件
由于 Node.js 普遍性的异步调用,事件处理循环是一个核心的问题,下面抄写书中的一个例程说明问题。
//event.js
var EventEmitter = require('events').EventEmitter;
var event = new EventEmitter();
event.on('some_event', function() {
console.log('some_event occured.');
});
setTimeout(function() {
event.emit('some_event');
}, 1000);
可以看到,EventEmitter 是一个 event 库中的事件处理对象,用 new 创建它的一个对象 event。(也就是说,上例的 event 是一个 EventEmitter 对象)
通过 event.on 可以将一个处理函数绑定到一个事件’some_event’(实质上是一个字符串)。然后通过 event.emit(‘some_event’) 就可以触发这个事件。
4. 模块 (Module) 和包 (Package)
且用傻瓜的方式来理解,教材作者说两者之间没有本质的区别。
Node.js 的模块和包没有完全遵循 commonJS 的标准,但差不多,但如果要跨平台(非Node)使用时则要留意,在 Node 上可用的包拿到别的 js 平台未必能用。
简单地说,reqire(…) 里面的东西,诸如 http, fs, event 等等就是一个模块。
同样抄一个例子:
//module.js
var name;
exports.setName = function(thyName) {
name = thyName;
};
exports.sayHello = function() {
console.log('Hello ' + name);
};
// 在同一目录下创建 getmodule.js,内容是:
//getmodule.js
var myModule = require('./module');
myModule.setName('BYVoid');
myModule.sayHello();
那首先,定义模块,require 的模块名对应的是文件名(可能需要包含目录),然后模块定义文件中,对 exports 对象赋值,就可以在 reqire 之后去调用它的值。看起来有点拗口,反正就是 require 之后得到一个对象,这个对象就相当于模块定义中的 exports 对象一样。
5. 模块加载的单一性
如果多次 require 一个相同的模块,那么会得到同一个对象(而不是多个副本),如果 var mod1 = require(‘mymodule’); var mod2 = require(‘mymodule’); 他们得到同一个对象,也共用同一个模块中的命名空间。
6. 覆盖 exports
上面已经知道,require 会返回一个对象,这个对象就是 exports,如果不想通过 exports.XXX = XXX 的方式来只定义一个方法,也可以整个替换掉 exports,如果在模块中声明了一个对象(MyObject),那么可以直接用
module.exports = MyObject;
来替换掉 exports,同样的道理,require 之后得到的对象就是这一个 MyObject 本身。 而事实上,在一个模块中,module.exports 只是一个用于“参数传递”的接口,它默认是 {},如果要变更其引用,就需要对 module.exports 赋值。
7. How about PACKAGE(包)?
书中原话:Node.js 的包是一个目录,其中包含一个 JSON 格式的包说明文件 package.json。 commonJS 的包遵循如下规范,但 Node 没那么严格,但还是建议遵循:
- package.json 必须在包的顶层目录下;
- 二进制文件应该在 bin 目录下;
- JavaScript 代码应该在 lib 目录下;
- 文档应该在 doc 目录下;
- 单元测试应该在 test 目录下。
8. 包的格式与结构 About package.json
具体格式这里不列出了,重要设置的定义包括这些。 main: 包的接口模块,缺省的话会试图用 index.js 或者 index.node 访问。 name: 包名称 其他若干设置其实一般来说不是太重要,包括一些版本、描述等等的信息,如果真的要正式公开发布一个包的时候在研究不迟。
9. More about npm
终于知道 npm 是啥了,就是 Node Package Manager,用来管理 node 的各种包。 在 Shell 中执行以下 npm 命令: 安装包:
npm install [package_name] npm i [package_name]
上面两句任选其一都可以,install 可简写为 i。 npm 在默认情况下会从 http://npmjs.org 搜索或下载包,将包安装到当前目录的 node_modules 子目录下。 然后呢,用上述命令安装的包(放在当前目录的 node_modules 下)的方式是“本地模式”的安装方式。事实上当我们去 require 一个包的时候,Node 会首先从当前目录的 node_modules 下面去找。 如果加上 -g 选项:
npm i -g [package_name]
这样的话就以“全局模式”安装了一个包(就装在有环境 PATH 的系统文件夹的 node_modules 下),但是直接 require 是加载不到的。 如果需要使用一个全局包,可以使用 Shell 的 npm link 命令:
npm link [package_name]
这样相当于把全局包在当前目录创建了一个“快捷方式”,然后就可以 require 到了。
10. 自动创建符合格式规范的包
执行 npm init 命令可以创建一个包,会提示输入相关的信息,然后在目录里面生成相应的 package.json 配置文件。
11. 包的发布
像我这种菜鸟看起来离我比较远,也就是说可以方便地发布自己制作的 Node 包,通过 npm addUser 来创建账号,然后通过 npm publish/unpublish 来将自己的包发布到 npmjs.org
12. 调试模式
Node 支持调试模式(单步调试等)使用:
node debug debug.js
来启动程序就会进入调试模式。 具体调试模式的使用以及命令还是等需要的时候查阅好了。 另外还可以远程调试,使用以下命令:
node –debug[=port] script.js node –debug-brk[=port] script.js
然后教材还介绍了如何使用 eclipse 进行调试,还可以用 node-inspector 包来用浏览器程序进行调试。
npm install -g node-inspector
好,这一节先到这里,已经学完本书的第三章了。
【转载请附】愿以此功德,回向 >>
原文链接:http://www.huangwenchao.com.cn/2014/01/node02.html【Node.js 笔记 (II)】
A match of violence and blood, the combo of fun and a slightly macabre feeling. Happy Wheels 2 https://happywheels2.club/ is a game in which you choose extravagant vehicles, from a bike to a wheel chair and ship the through a comfy trail where the awkward driver will make an effort to urgently escape mutilation, decapitation and death, you can also detach the character out of the motor vehicle.
赚$1000一天很容易,如果你使用这个金融机器人。 链接 – http://www.google.com/url?q=%68%74%74%70%3A%2F%2F%72%65%69%64%61%69%66%6f%73%74%69%68%69%6e%2e%6d%6c%23%6b%78%6d%7a%4e%59%58%42%43%63%75%5a%73%73%64&sa=D&sntz=1&usg=AFQjCNHpCy8m8dA2Sr7Pj_rIRaD7uPTkzA
金融机器人不断为您带来的钱,而你睡觉。 链接 – https://bit.ly/2Ixcf7j
使用金融机器人开始您的在线工作。 链接 – https://bit.ly/3pxwXFd
学习如何使数百背上的每一天。 链接 – https://bit.ly/2IJLNHK