Nodejs支持EsModule
模块化
-
CMD/AMD/requrie.js
-
CommonJS
- 加载:require()
- 输出: module.exports / exports.x
-
ES Module
- 加载:import
- 输出:export default / export function / const x
方法
- 使用
Webpack
在项目中安装 webpack webpack-cli
npm i webpack webpack-cli -D
安装 babel
npm i -D babel-loader @babel/core @babel/preset-env @babel/plugin-transform-runtime @babel/runtime-corejs3
在目录下 创建 webpack.config.js 配置文件 @babel/plugin-transform-runtime
const path = require('path')
// 使 config 在 vscode 下拥有 ts 代码补全
/** @type {import('webpack').Configuration} */
const config = {
entry: './core.js', // 输入文件
output: {
path: path.join(__dirname, '/dist'), // 输出文件
filename: 'core.js',
},
mode: 'development', // 打包模式
target: 'node', // 运行环境默认 web, 应该改为 node 才能进入 node 环境
module: {
rules: [
{
test: /.js$/, // 处理所有 .js 文件
exclude: /(node_modules|dist)/, // 排除 node_modules、dist
use: {
loader: 'babel-loader', // 使用 babel-loader
options: {
presets: ['@babel/preset-env'], // 预设 babel 环境
plugins: [ // 插件
[
'@babel/plugin-transform-runtime',
// 提供处理 async、await 转译后调用的 regeneratorRuntime 变量
{
corejs: 3, // 指定 runtime-corejs 的版本,目前有 2 3 两个版本
regenerator: true,
useESModules: true,
helper: true
}
]
]
}
}
}
]
}
}
module.exports = config
-
使用
Node原生模式.mjs将文件后缀名改为
.mjs, 同时将所有require导入改为import导入,同时导入的时候必须填写完整文件名// index.mjs import './core.mjs'// core.mjs import { test } from './utils.mjs' test()// utils.mjs export function test() { console.log('utils') }执行
Node 版本 14及以上 的可直接执行
node index.mjs
Node 版本 大于等于8,小于14 需加上 --experimental-modules 才能正常执行
node --experimental-modules index.mjs
\