SystemJS:我在提供默认 JS 扩展时缺少什么

SystemJS: What am I missing in providing the default JS Extension

不,我不是在构建 angular2 应用程序。 我正在试用 SystemJS,这是我加载模块的脚本

<script type="text/javascript">
    System.config({ baseURL: '/scripts/ts',
        map: { 'deck': 'deck'}, defaultJSExtensions: "js", defaultExtension: "js" });
    System.import('deck').then(function () {
            document.write("Loaded...");
        });
</script>

这是我收到的控制台消息。

system.src.js:sourcemap:80 Uncaught (in promise) Error: Unexpected identifier   Evaluating http://localhost:61968/scripts/ts/deck   Loading deck
    at eval (<anonymous>)
    at evaluate (system.src.js:sourcemap:2821)
    at system.src.js:sourcemap:3620
    at dynamicExecute (system.src.js:sourcemap:1144)
    at doEvaluate (system.src.js:sourcemap:1091)
    at ensureEvaluate (system.src.js:sourcemap:999)
    at system.src.js:sourcemap:617
    at <anonymous>

看起来 systemjs 没有选择默认扩展。我该如何解决这个问题?

defaultJSExtensions 从 0.20.0 版本开始不再受支持。你可以在release notes for 0.20.0-alpha1中看到它:"Removes support for defaultJSExtensions."

defaultExtension 是在 packages 选项中定义的包的参数,因此您必须定义一个包才能使用它。

考虑到你的map也没有必要,那么你应该使用这样的东西:

{ 
  baseURL: '/scripts/ts',
  packages: {
    // Yep, this defines a package with an empty name. This will
    // encompass everything not encompassed by a more specific package
    // name.
    "": {
      defaultExtension: "js" 
    },
  },
}

实际上,这也行得通:

{ 
  baseURL: '/scripts/ts',
  packages: {
    "": {},
  },
}

原因如下:添加扩展没有全局默认设置。但是,如果您定义了一个包但没有为其指定 defaultExtension,则该包会自动获得 defaultExtension 的默认值,即 "js".