每周获取最新的 Wordpress 资源

Node.js 入门:环境与调试

Node.js 从头学习第一篇文章,Node.js 对于前端越来越重要,Node.js 的出现也改变了前端,兴起了大前端,是时候好好学习喽!

CommonJS

什么是 CommonJS 规范呢?

  • 每个文件就是一个模块,有自己的作用域
  • 在模块内部 module 变量代表模块本身
  • module.exports 属性代表模块对外接口

require

输出模块的变量或函数使用 module.exports,引入模块的 require 规则:

  • / 表示绝对路径,./ 表示相对于当前文件
  • 支持 js、json、node 拓展名,不谢一次尝试
  • 不谢路径则认为是 build-in 模块或者各级 node_modules 里的第三方模块

require 的特性:

  • module 被加载的时候执行,加载后缓存(也就是只加载一次),有些代码如果不想通过 require 暴露,那么封装到函数中去
  • 一旦出现某个模块被循环加载,就只输出已经执行的部分,还未执行的部分不会输出,要避免循环引用

引用内置模块

const fs = require('fs');

fs.readFile('文件路径', (err, data) => {
  if (err) {
    console.log(err);
  } else {
    console.log(data.toString());
  }
})

引用第三方模块,需要使用 npm 安装,然后直接通过 require 引用。

module.exports 和 exports

node.js 的一个文件模块其实是包裹在如下代码中运行的:

(
    function(exports, require, module, __filename, __dirname) {
        ...
    }
)

exports 其实就是等价于如下代码:

const exports = module.exports;

这个就引入一个问题,虽然可以用 exports 来快捷地往 module.exports 添加属性,但是不能改变 exports 的指向,如下:

// 可以
exports.test = 100;
// 不可以,引入后拿不到
exports = {
    ...
}

global

Node.js 的全局对象 global 对应浏览器环境中的全局对象 window。

global 自带一些常用属性和方法:

  • CommonJS
  • Buffer、process、console
  • timer

我们也可以挂载一些自定义的属性和方法到 global 对象,然后全局就可以访问到。

process

process 顾名思义,就是进程的意思。

常用的 process 的一些属性和方法如下代码:

// 执行相关
const {argv, argv0, execArgv, execPath} = process;

argv.forEach(item => {
    console.log(item);
})

console.log("argv0", argv0);

console.log("execArgv", execArgv);

console.log("execPath", execPath);

// env
const {env} = process;

console.log("env", env);

// cwd 方法
console.log(process.cwd());

process 中 nextTick 总是比 setImmediatesetTimeout 提早执行,setImmediate 最慢。

nextTick 会排在事件队列的队尾,下一个队列执行前必须先执行它,setImmediate 会排在事件队列的队首,setTimeout 在中间。

setImmediate(() => {
    console.log('setImmediate');
})

setTimeout(() => {
    console.log('timeout');
}, 0)

process.nextTick(() => {
    console.log('nextTick');
})

调试

主要有两种方式:

  • inspect
  • vscode

举个例子,浏览器调试 node.js 的代码

  1. node --inspect-brk main.js
  2. 浏览器中打开 chrome://inspect

更多查看:Debugging Guide

You May Also Like

About the Author: ted

发表评论

电子邮件地址不会被公开。 必填项已用*标注