琐碎点汇总
· 阅读需 26 分钟
在 Node 环境中使用 ESM
两种方式:
- 把模块文件的后缀改成
.mjs; - 给最近的上级 package.json 文件添加名为
type的字段,并将字段值改成module。
ESM 中不支持 CommonJS 模块提供的某些引用
这包括:
- require
- exports
- module.exports
- __filename
- __dirname
要使用 require 函数,可以这样做:
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
// 就可以使用 require 函数引用 CommonJS 模块了
import.meta.url可以获得当前模块的文件路径(文件网址字符串)。
要访问到 __filename 和 __pathname,可以这么做:
import { fileURLToPath } from 'url';
import { dirname, resolve } from 'path';
// 将文件网址转成路径地址
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
// 或者 const __dirname = resolve();
需要注意的是,ESM 的全局作用域中,
this是未定义的(undefined),而 CommonJS 中 this 则是指向exports的引用。
