Angular 没有开始使用 SystemJS 包

Angular doesn't start using SystemJS bundle

自两周前以来,我一直在试验一种奇怪的行为。

我考虑过并决定做​​一个回购并进行测试以隔离问题。

这是从 angular/quickstart 中提取的一个简单的 repo。我添加了一个 gulp 文件来构建一个包,当我尝试加载它时,我遇到了同样的问题。应用程序未启动。

这是systemjs的配置:https://github.com/tolemac/systemjs-test/blob/master/systemjs.config.js

这是构建包的 gulp 文件:https://github.com/tolemac/systemjs-test/blob/master/gulpfile.js

这是回购协议:https://github.com/tolemac/systemjs-test

复制说明:

mkdir systemjs-test
cd systemjs-test
git clone https://github.com/tolemac/systemjs-test.git .
npm install
gulp bundle
npm start

我试过你的回购协议,怀疑它生成的包看起来不正确:

(function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? 
      factory(exports, require('@angular/core')) : 
      'function' === 'function' && true ? System.registerDynamic('npm:@angular/compiler/bundles/compiler.umd.js', ['@angular/core'], false, function ($__require, $__exports, $__module) {
        if (typeof factory === 'function') {
            return factory.call($__exports, $__exports, $__require('@angular/core'));
        } else {
            return factory;
        }

这里出了点问题。注意 'function' === 'function' && true ? 语句...

我建议使用 Rollup 来捆绑您的应用。

Demo Starter App

嗯,我花的时间越来越多了。

阅读systemjs、systemjs-builder和构建器使用的babel插件识别加载模块的模块加载器代码的源代码,我学到了很多东西。所有只是为了意识到问题是 SystemJS 不识别 bundle 模块的格式...因此,systemjs 不执行加载的代码...然后解决方案是通过设置 bundle 的格式配置,这样:

packages: {
  ...
  ...
  ...
  'bundles/vendor.js': {
    format: "system"
  }
}

已解决!