#javascript #rollup #rollupjs
#javascript #rollup #rollupjs
Вопрос:
У меня есть проект, над которым я работаю для развлечения, чтобы получить примеры UMD, ESM и CommonJS, работающие с rollup. UMD и ESM отлично работают, но для CommonJS я получаю…
Неперехваченная ошибка ссылки: экспорт не определен
Вывод CommonJS таков…
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
class SimpleTest{
constructor(message){
console.log(`Your message is ${message}`);
}
}
exports.SimpleTest = SimpleTest;
HTML есть…
<html>
<body>
<script src="https://requirejs.org/docs/release/2.3.6/comments/require.js"></script>
<script>
require(["./target/ng-demo.js"], (dep)=>{
new dep.SimpleTest("ESM");
});
</script>
</body>
</html>
Разве экспорт не будет поступать из RequireJS?
Ответ №1:
Похоже, вы пытаетесь продемонстрировать amd
вместо cjs
. Не имеет смысла запускать cjs
в браузере, поскольку он работает только на node env.
Вы пытаетесь включить, require.js
который поддерживает amd
браузер, поэтому вы просто переключаете свой cjs
на amd
, тогда это сработает:
{
file: "./target/ng-demo.js",
format: "amd" // instead of `cjs`
}
Комментарии:
1. Спасибо, это ответ. Просто из любопытства, как бы я использовал файл commonjs в браузере?
2. Нет. Cjs предназначен только для узла
Ответ №2:
Это исправлено, установив для module
параметра компилятора значение es6
:
{
"compilerOptions": {
"module": "es6",
"target": "es5",
}
}
Дайте мне знать, если это работает для вас!
Комментарии:
1. На самом деле, извините, это не работает, потому что это приводит к тому, что ESM тоже становится ES5, хотя спасибо
Ответ №3:
На случай, если кому-то интересно, вот что я сделал, чтобы заставить CJS работать…
<html>
<body>
<script src="https://cdn.jsdelivr.net/npm/require1k@2.0.0/require1k.min.js"></script>
<script>
R(function (require, module, exports) {
const {SimpleTest} = require("./target/ng-demo.cjs");
new SimpleTest("commonjs");
});
</script>
</body>
</html>