Я работаю с TypeScript и модулями, чтобы тестировать с Jest. Я могу нормально пройти тесты в Jest, но трансплантированный JavaScript не запускается в браузере. Я получаю сообщение об ошибке:
Uncaught ReferenceError: exports is not defined at scripts.js:2
Транспортированный JavaScript:
"use strict";
Object.defineProperty(exports, "__esModule", { value: true }); // this is the offending line
var root = document.documentElement;
exports.root = root;
var button = document.querySelector('button');
if (button) {
button.addEventListener('click', handleClick);
}
function handleClick() {
if (root)
console.log(root.style.backgroundColor);
var color = '#000000'.replace(/0/g, function () {
return Math.floor(Math.random() * 16).toString(16);
});
if (root) {
root.style.setProperty('--bg-color', color);
}
}
exports.handleClick = handleClick;
var sum = function (a, b) {
return a + b;
};
exports.sum = sum;
Поскольку TypeScript заявляет, что он "компилируется в чистый, простой JavaScript код, который выполняется в любом браузере , в Node.js или в любом JavaScript движке, который поддерживает ECMAScript 3 (или новее): «Я ожидаю, что это будет работать в Chrome.
Мой tsconfig. json:
{
"compilerOptions": {
"target": "ES5",
"module": "CommonJS",
"allowJs": true,
"outDir": "./lib",
"strict": true,
"moduleResolution": "node",
"esModuleInterop": true
}
}
Я намеренно стараюсь держать все как можно более чистым, потому что я пытаюсь изучить некоторые конкретные c вещи о тестировании, настройке среды и узле. Возможно, я стал слишком минималистичным.
Если я изменю модуль на ES2015, то переданный код работает. Я неправильно использую Common JS? Это предназначено только для запуска на сервере?
Заранее спасибо.