如何在 node 中运行 esm 模块

我们都知道前端有两种常见的模块化规范,一种是 ES6 模块 简称 ESM,一种是 Node.js 专用的 CommonJS 模块 简称 CJS,两者是不兼容的。

我最近在写 node 项目,整个项目是用 @nest/cli 起的,文件模块默认用的是 ESM。为了快捷验证我的爬虫,想直接在 node REPL 环境中单独运行,但总是报错。

研究了下,有 2 种方便快捷的方法可以在 node REPL 中跑 ESM。

第一种

直接将文件后缀从.ts改为.mjs

1
node crawl.mjs

第二种

环境中分别安装 typescript 和 ts-node:

1
2
npm install -g typescript
npm install -g ts-node

修改tsconfig.json

1
2
"module": "ESNext", /* Specify what module code is generated. */
"moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */

修改package.json

1
"type": "module",

运行文件:

1
ts-node --esm crawl.ts