esno 是什么

esno 是基于 esbuild 的 TS/ESNext node 运行时。该库会针对不同的模块化标准,采用不同的方案:

简单来说,就是使用esno可以在node环境中运行esm代码

快速上手

安装

  1. npm i esno -D

umi中使用

  1. "scripts": {
  2. "bootstrap": "esno scripts/bootstrap.ts",
  3. "check:packageFiles": "esno scripts/checkPackageFiles.ts",
  4. "doc:dev": "esno scripts/startDocsSite.ts",
  5. "postinstall": "esno scripts/postinstall.ts",
  6. "release": "esno scripts/release.ts",
  7. "setup:webstorm": "esno scripts/setupWebStorm.ts",
  8. },

esno源码

  1. #!/usr/bin/env node
  2. const spawn = require('cross-spawn')
  3. const spawnSync = spawn.sync
  4. const register = require.resolve('esbuild-register')
  5. const argv = process.argv.slice(2)
  6. 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 特性的工具

使用

  1. node -r esbuild-register scripts/bootstrap.ts

-r 用于指定预加载的文件,即在执行 file.ts 文件前,提前加载 esbuild-register 模块