ESM
不再提供Node
某些特性与不能灵活引用json文件
了,因此__dirname
、__filename
、require
、module
和exports
这几个特性将无法使用。
不过我们可以自动打上补丁,来解决这些问题:
__filename
与__dirname
可用import.meta
对象重建require
、module
和exports
可用import
与export
代替json文件
的引用可用Fs模块
的readFileSync
与JSON.parse()
代替
import { readFileSync } from "fs";
import { dirname } from "path";
import { fileURLToPath } from "url";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
console.log(__filename, __dirname);
const json = readFileSync("./info.json");
const info = JSON.parse(json);
- @babel/cli:提供支持
@babel/core
的命令运行环境 - @babel/core:提供转译函数
- @babel/node:提供支持
ESM
的命令运行环境 - @babel/preset-env:提供预设语法转换集成环境
{
"script":{
"start":"babel-node src/index.js"
},
"babel": {
"presets": [
"@babel/preset-env"
]
}
}
pnpm i nodemon -D
在package.json
中指定nodemonConfig
相关配置,将start
命令替换为nodemon -x babel-node src/index.js
{
"nodemonConfig": {
"env": {
"NODE_ENV": "dev"
},
"execMap": {
"js": "node --harmony"
},
"ext": "js json",
"ignore": [
"dist/"
],
"watch": [
"src/"
]
}
}