Node中的事件驱动机制和CommonJs规范

Node.js 是一个基于Chrome V8引擎的JavaScript运行时(Node.js is a JavaScript runtime built onChrome’s V8 JavaScript engine )
在NODE中创建一个js文件就相当于创建了一个模块
import B from “./B” => NODE不支持ES6 Module模式
导入自己写的模块一定要加地址,如果写成require(“B”)它是先找安装的第三方模块,如果没有再找内置模块

真实工作中使用NODE的几种常见场景

npm模块管理和webpack以及CommonJS模块导入导出等
webpack-dev-server 
proxy(跨域)

javascript + node.js的全栈开发
    JSON、Redis
    MongoDB
    MySQy

node.js作为中间层
    数据/业务中间层
    服务器渲染(SSR) : Nuxt.js 和Next.js

Node安装

https://nodejs.org/en/

NODE的基础知识

1.Node的两大特点
  • 基于V8引擎渲染JS

    • repl (Read-Evaluate-Print-Loop, 输入-求值-输出-循环) :http://nodejs.cn/api/repl.html
    • node xxx.js(在终端调用某个 js文件 前面要加node 例如node app.js)
  • event-driven事件驱动(单线程、非阻塞I/0)

    • I/0就是 input和 output 输入和 输出 对于文件系统的增删改查
  • thread-based system(java) && event-based system(node)

EventEmitter
/**
 * 发布订阅设计模式
 */
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
// => 基于ON的方式,自定义事件和向事件池中追加要处理的方法
myEmitter.on('A', () => {
    console.log(1);
});
myEmitter.on('A', () => {
    console.log(2);
});
// => 基于EMIT触发指定自定义事件中的方法执行
myEmitter.emit('A');
setImmediate / setTimeout / setInterval/ process.nextTick
console.log(0)
setTimeout(() => {
    console.Log(1);
}, 100);
setTimeout(() => {
    console.log(2);
}, 0); // => 不是立即执行,也需要等待   (setTimeout是优先于setImmediate)
setImmediate(() => {
    console.log(3);
}); // => 和setTimeout(0)比较类似   放置到Event Queue的最顶部(也就是主队列执行完,首先执行的就是他)
process.nextTick(() => {
    // 执行进程中的下一个任务   放置在主任务队列的末尾,也就是主任务一执行完,先执行 process.nextTick,然后再去Event Queue中查找执行
    console.log(4);
});
console.log(5);
fs内置板块中的方法

process.env.NODE_ENV设置环境变量

// process.env.NODE_ENV : 设置NODE的全局环境变量
// => webpack区分开发环境和生产环境

const env = process.env.NODE_ENV || "dev"
if (env === "dev") {
    console.log("开发环境~~");
} else {
    console.log("生产环境~~");
}
// 下面这两行代码写在 package.json文件中
"scripts": {
	"start": "set NODE_ENV=dev&node envTest.js",
	"build": "set NODE_ENV=pro&node envTest.js"
}
2.CommonJs模块规范
单例模式
const exampleModule = (function () {
function fn() { }
	return {
		init() {
			fn();
		}
	}
})();
exampleModule.init()
AMD ( Asynchronous Module Definition)
requirejs.config({
	baseUrl: 'js'
});
require(['common', 'utils'], function (common, utils) {
	// do something
	common.math()
});
CMD (Common Module Definition)
define(function (require, exports) {
	var a = require('./a');
	a.doSomething();
	// ...
	var b = require('./b');
	b.math();
});
CommonJS
module.exports = {
	fn() { },
};
let m = require('./M');
// => 想啥时候调用就啥时候调用,类似于CMD
ES6Module
export default {}
import xXx from ' ./xxx';
// => 也需要把它放置在当前模块最开始的位置,类似于 AMD
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值