Почему преобразование ESM в CommonJS не так просто найти и заменить? - PullRequest
0 голосов
/ 24 октября 2018

Я работал над проектом 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 для NodeJ изачем нужен этот стандартный код и переименование идентификатора?

Например, почему следующие преобразования не могут быть выполнены простым поиском и заменой (с регулярным выражением или некоторым анализом):

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 {...}

1 Ответ

0 голосов
/ 24 октября 2018

Это не отображение 1: 1.Например, используя синтаксис импорта / экспорта ES6, вы можете экспортировать несколько символов и по умолчанию.Чтобы сделать то же самое в CommonJS, вам нужно начать вложение экспортированных объектов в другие экспортируемые объекты, что может вызвать проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...