esno 是什么
esno 是基于 esbuild 的 TS/ESNext node 运行时。该库会针对不同的模块化标准,采用不同的方案:
- esno - Node in CJS mode - by esbuild-register
- esmo - Node in ESM mode - by esbuild-node-loader
简单来说,就是使用esno可以在node环境中运行esm代码
快速上手
安装
npm i esno -D
umi中使用
"scripts": {
"bootstrap": "esno scripts/bootstrap.ts",
"check:packageFiles": "esno scripts/checkPackageFiles.ts",
"doc:dev": "esno scripts/startDocsSite.ts",
"postinstall": "esno scripts/postinstall.ts",
"release": "esno scripts/release.ts",
"setup:webstorm": "esno scripts/setupWebStorm.ts",
},
esno源码
#!/usr/bin/env node
const spawn = require('cross-spawn')
const spawnSync = spawn.sync
const register = require.resolve('esbuild-register')
const argv = process.argv.slice(2)
process.exit(spawnSync('node', ['-r', register, ...argv], { stdio: 'inherit' }).status)
由以上代码可知,当执行 esno scripts/bootstrap.ts命令后,会通过 spawn.sync 来启动 Node.js 程序执行脚本。在执行时使用了 -r 选项,该选项的作用是预加载模块esbuild-register
esbuild-register
esbuild-register是什么
esbuild-register 是一个基于 esbuild 来转换 JSX、TS 和 esnext 特性的工具
使用
node -r esbuild-register scripts/bootstrap.ts
-r 用于指定预加载的文件,即在执行 file.ts 文件前,提前加载 esbuild-register 模块