1模块化
Node模块化基础知识
1.node默认js模式
node默认使用的时cjs(CommonJs),为第三包但是被默认支持(文件拓展名为cjs),其理念是文件即模块:
- 需要什么直接require引入
- 需要暴露什么直接exports / module.exports
- 引入时,可以不写js扩展名
- 默认入口文件为index.js
//在index.js中
const m1 = require("./m1")
//之后执行 node ./index.js output:{a:"lee",b:123}
//访问属性和方法可以使用dot的方式,本质exports会将所有变量包进一个对象中
//在m1.js中
exports = {
a: "lee",
b: 123
}
console.log(exports);
module对象
Node提供构建函数Module
,所有模块都是其实例。相关解读文章
exports和module.exports的区别
简单来说,exports是指向module.exports的 let exports = module.exports
。这样可以方便我们使用,但是不要将其复制,这样会切断联系。
所以使用的时候,要用 exports.xxx
来暴露信息,而不是直接用=
2.ESM
这是es官方推出的模块化方式(文件拓展名为mjs),现在也被绝大多数浏览器支持。有如下特点:
- 导入使用import, 使用as起别名,基本形式import xxx from "./xxx.js"
- 对于default暴露的可以直接引用名称,对于非default暴露的请使用{}
来引用
- 组合导入,请先引入default,再引入其他
- esm默认都是运行在严格模式下
- html文件若是想模块化引入,请在script标签下加上type="module"
//在index.js中
import m2,{a} from "./m2.js"
m2(); //调用会直接使用function(){}
a; //10
//在模块文件m2.js中,直接使用export关键字
export let a = 10;
export default function(){
console.log("我是默认导出函数");
}
个人更加倾向于这种模块化的形式,符合当今主流语言。如果想开启这种形式,请在package.json中使用type=module