// lib.jsexport let counter = 3;export function incCounter() {counter++;}// main.jsimport { counter, incCounter } from './lib';console.log(counter); // 3incCounter();console.log(counter); // 4
在举一个小粒子// m1.jsexport var foo = 'bar';setTimeout(() => foo = 'baz', 500);// m2.jsimport {foo} from './m1.js';console.log(foo);setTimeout(() => console.log(foo), 500);上面代码中 , m1.js的变量,foo,在刚加载时等于bar,过了 500 毫秒,又变为等于baz 。
Node.js 的模块加载方法JavaScript 现在有两种模块 。一种是 ES6 模块,简称 ESM;另一种是 CommonJS 模块,简称 CJS 。CommonJS 模块是 Node.js 专用的 , 与 ES6 模块不兼容 。语法上面,两者最明显的差异是,CommonJS 模块使用require()和module.exports.ES6 模块使用import和export 。ps:从 Node.js v13.2 版本开始,Node.js 已经默认打开了 ES6 模块支持 。Node.js 要求 ES6 模块采用.mjs后缀文件名 。也就是说,只要脚本文件里面使用import或者export命令 , 那么就必须采用.mjs后缀名 。Node.js 遇到.mjs文件,就认为它是 ES6 模块,默认启用严格模式,不必在每个模块文件顶部指定"use strict" 。
友情提示注意,ES6 模块与 CommonJS 模块尽量不要混用 。require命令不能加载.mjs文件 , 会报错 。只有import命令才可以加载.mjs文件 。反过来.mjs文件里面也不能使用require命令,必须使用import 。
简单说一下他们的第2个差异第二个差异是因为 CommonJS 加载的是一个对象,通过 module.exports 输出 。该对象只有在脚本运行完才会生成 。而ES6 模块不是对象,它的对外接口只是一种【静态定义】,在代码静态解析阶段就会生成 。
【Module加载的详细说明-保证你有所收获】
推荐阅读
- 主宰无双强势的阵容搭配有哪些
- 主宰无双刷游戏快速获取金币的方法
- 怎样摇骰子怎么玩点数(摇骰子的高级技巧)
- 骰子怎么玩(骰子出现1-6点的概率)
- KTV骰子是怎么玩的(ktv骰子摆爱心图片)
- 摇筛子骰子游戏怎么玩(骰子游戏最经典的)
- 酒吧里的叫骰子怎么玩。求教(酒吧玩5个骰子技巧口诀)
- 微信朋友圈怎么转发别人分享的链接、图片、文章
- 编码中的Adapter,不仅是一种设计模式,更是一种架构理念与解决方案
- 记一次批量更新整型类型的列 → 探究 UPDATE 的使用细节