3、模块化

什么是模块

解决的问题

CommonJS

commonJs主要为了解决ES6之前无模块概念的问题

引入核心模块不需要写路径,引入文件模块需要写路径(一般是相对路径./../开头)

导出和导入

方式一,

model.js

var msg = 'this is a model';
function func(){
    console.log('this is a function by model');
}
//导出变量、方法
module.exports = {
    msg,
    func,
    name:'model'
}

index.js

//引入同目录下的model.js,如果是相对路径,必须以./开头
//此处的model.js的.js可以省略
var model = require('./model');

console.log(model.msg);
model.func();
console.log(model.name);

方式二,

model.js

var msg = 'this is a model';
function func(){
    console.log('this is a function by model');
}
exports.func = func;
exports.msg = msg;
exports.num = 10;

index.js

//引入同目录下的model.js,如果是相对路径,必须以./开头
//此处的.js可以省略
var model = require('./model.js');

console.log(model.msg)
model.func();
console.log(model.num);

区别

ES6Modules

使用的时候,引用js文件必须type="model"

export

image-20210803174814524

导出函数或类

image-20210803174905090

export default

image-20210803174957130

import

image-20210803175028522

全局变量

nodel中没有web中的全局变量window,node中的全局变量是global

console.log(global);

输出,看到封装了一些函数可以使用

<ref *1> Object [global] {
  global: [Circular *1],
  clearInterval: [Function: clearInterval],
  clearTimeout: [Function: clearTimeout],
  setInterval: [Function: setInterval],
  setTimeout: [Function: setTimeout] {
    [Symbol(nodejs.util.promisify.custom)]: [Getter]
  },
  queueMicrotask: [Function: queueMicrotask],
  clearImmediate: [Function: clearImmediate],
  setImmediate: [Function: setImmediate] {
    [Symbol(nodejs.util.promisify.custom)]: [Getter]
  }
}
//声明一个全局变量a,因为每个模块单独运行在一个函数里面
a = 10;
console.log(global.a);