#typescript #systemjs
#typescript #systemjs
Вопрос:
Я пытаюсь использовать модульную систему с Es6 и SystemJS.
Это мой библиотечный код
export function sayHello( name ) {
return `Hello ${name}`;
};
И импорт app.js .
import { sayHello } from './lib'
sayHello('Myname');
tscongig.json
{
"compilerOptions": {
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"module": "commonjs",
"target": "ES5",
"outDir": "built",
"rootDir": "src"
},
"include": [
"**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
package.json
{
...
"dependencies": {
"lite-server": "^2.4.0",
"systemjs": "^3.1.1"
}
}
index.html
<!DOCTYPE html>
<html>
<head><title>TypeScript Greeter</title></head>
<body>
<script src="/node_modules/systemjs/dist/system.min.js"></script>
<script>
System.import('/built/app.js').then(function(){
console.log('Done');
}, function(error){
console.log(error);
});
</script>
</body>
</html>
После запуска я вижу ошибку.
Uncaught ReferenceError: exports is not defined
Помогите мне, пожалуйста, где найти ошибку?
Ответ №1:
Во-первых,
-
Измените
module
параметр в вашемtsconfig.json
файле на"module": "system"
, который должен решить проблему экспорта. -
Добавьте следующее после вашего,
<script src="/node_modules/systemjs/dist/system.min.js"></script>
чтобы решить проблемы с расширением .js».<script> var systemResolve = System.resolve; System.resolve = function (name, parent) { return Promise.resolve(systemResolve.call(this, name, parent)) .then(function (resolved) { if(!resolved.endsWith('.js')) resolved = '.js'; return resolved; }); }; </script>
Ответ №2:
Я обнаружил, что необходимо поместить system вместо commonjs в раздел module. Но теперь у меня другая проблема с расширением. SystemJS не может загружать модули и не добавляет расширение «.js». Даже после добавления System.defaultJSExtensions = true;