Nodejs ES Modules 迁移指南

发布于 1周前 作者 sinazl 来自 nodejs/Nestjs

Nodejs ES Modules 迁移指南
4 回复

没有。如果你给别人用,最好同时提供 commonjs 和 esm 。另外,我真的不喜欢他的库


tsup
如果难搞比如重度使用 esm-only dep, 那么这个包也只打 esm-only. (轻度使用可以使用 import()
如果顺手的话可以 esm + cjs

esm-only 的包越来越多, 首选 esm

https://www.npmjs.com/package/last-cjs-version
获取一个包的最后一个 cjs 版本

<br>$ last-cjs-version add execa -m<br>[last-cjs-version] detected package manager: pnpm<br>[last-cjs-version] executing: pnpm add execa@5<br><br>Already up to date<br>Progress: resolved 332, reused 323, downloaded 0, added 0, done<br>Done in 2.1s<br>

以下是Node.js ES Modules(ESM)迁移指南:

一、背景

随着JavaScript模块化的发展,ESM逐渐成为标准。迁移至ESM可提升代码的模块化和可维护性。

二、迁移步骤

  1. 修改package.json

    添加"type": "module",以告知Node.js使用ESM加载器。

    {
      "type": "module"
    }
    
  2. 转换导入导出语法

    将CommonJS(CJS)的require()module.exports转换为ESM的importexport

    // CJS
    const fs = require('fs');
    module.exports = {
      readFile: fs.readFile
    };
    
    // ESM
    import fs from 'node:fs';
    export const readFile = fs.readFile;
    
  3. 更新文件路径

    使用完整的文件路径和扩展名进行导入。

    import readFile from './readFile.js';
    
  4. 调整TypeScript配置

    若使用TypeScript,需更新tsconfig.json,设置module"es2020"或更高版本。

    {
      "compilerOptions": {
        "module": "es2020"
      }
    }
    

三、注意事项

  1. 确保Node.js版本支持ESM。
  2. 测试迁移后的代码,确保功能正常。

通过以上步骤,可将Node.js项目成功迁移至ESM,享受模块化带来的优势。

回到顶部