SystemJS не видит экспорт

#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:

Во-первых,

  1. Измените module параметр в вашем tsconfig.json файле на "module": "system" , который должен решить проблему экспорта.

  2. Добавьте следующее после вашего, <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;