我一直在做一个TypeScript项目(用于NodeJs环境),所以我一直在使用ES模块语法进行导入和导出。使用TSC
"module": "commonjs", "esModuleInterop": true
,创建了许多样板代码,例如:
var __importStar = (this && this.__importStar) || function (mod) {
// omitted
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = require("path"); // renamed identifier
const pug_1 = __importDefault(require("./template/pug"));
pug_1.default(...) // use of .default
所以我的问题是,为什么我们不能简单地将ESM导入/导出转换为普通的
require
调用NodeJs以及为什么需要这个样板代码和标识符重命名?
例如,为什么不能通过简单的查找和替换(使用regex或某些解析)完成以下转换:
import * as path from "path";
// const path = require("path");
import { resolve } from "path";
// const { resolve } = require("path");
export default class MyClass {...}
// module.exports = class MyClass {...}
export class MyClass {...}
// module.exports.MyClass = class MyClass {...}