Open5
CJS => ESM
package.json
package.jsonに以下を追記する。
"type": "module"
.eslintrc.js
拡張子をcjsに変更する。
$ mv .eslintrc.js .eslintrc.cjs
.eslint.cjs
にsourceType: "module"
を追加する。
parserOptions: {
+ sourceType: "module"
}
commonjs-to-es-module-codemod
commonjs-to-es-module-codemodでESMに変換する。
$ npm install jscodeshift -g
$ npm add commonjs-to-es-module-codemod --save-dev
- commonjs-to-es-module-codemodを
node_modules
にインストールしないとうまく動かなかった。
まとめて変換する場合:
$ find src -name "*.js" | xargs jscodeshift -t node_modules/commonjs-to-es-module-codemod/dist/index.js
一つずつ変換する場合:
$ jscodeshift -t node_modules/commonjs-to-es-module-codemod/dist/index.js "src/index.js"
手動変換
-const router = require("express-promise-router")();
+import Router from "express-promise-router";
+const router = Router();
-const CONSTNTS = require("../constants.js");
+import CONSTNTS from "../constants.js";
-module.exports = CONSTNTS;
+export default CONSTNTS;
-const JSON_FILE = require("./file.json");
+import path from "path";
+const dirname = path.dirname(new URL(import.meta.url).pathname);
+const JSON_FILE = JsonUtils.load(path.resolve(dirname, "./file.json"));
-const {
- Parser,
- transforms: { flatten },
-} = require("json2csv");
+import { Parser } from "json2csv";
+import flatten from "json2csv/lib/transforms/flatten.js";
-app.use("/", require("./routes/cats.js"));
+import cats from "./routes/cats.js";
+appApi.use("/", cats);
class Cat {
}
-module.exports.Cat = Cat;
+export { Cat };
関数の中に書かれているrequire
も手動で直す。例えば以下の様な書き方。
async function main() {
const admin = require("firebase-admin");
}
Version: 27.2
ECMAScript Modules
Jest ships with experimental support for ECMAScript Modules (ESM).