SystemJS的生产工作流程和通过CDN托管的外部依赖项

way*_*ure 7 javascript node.js systemjs http2 jspm

我正在尝试找出一个与开发工作流程相配的良好生产工作流程.需要从构建中排除1MB的外部库,然后使用CDN单独托管它们.所以我们有这个:

<script src="jspm_packages/system.js"></script>
<script src="config.js"></script>
<script src="build.js"></script>
<script>
    System.import('app/main.js');
</script>
Run Code Online (Sandbox Code Playgroud)

这很好,main.js中的任何内容都被忽略,因为它已经包含在build.js中.虽然我想这意味着什么时候回到开发热门建设,我们必须先删除build.js?

所以现在我想分离生产的外部依赖项:

builder.buildStatic('app/main.js', 'build.js', {
  externals: ['jquery'],
  globalName: 'App',
  globalDeps: {
    'jquery': 'jQuery'
  }
});
Run Code Online (Sandbox Code Playgroud)

当我们这样做时,我们需要添加以下行:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2 jquery.min.js"></script>
<script src="jspm_packages/system.js"></script>
<script src="config.js"></script>
<script src="build.js"></script>
<script>
    System.import('app/main.js');
</script>
Run Code Online (Sandbox Code Playgroud)

这意味着当我们切换回开发构建时,jQuery将被双重捆绑到main.js中?然后是SystemJS的片段:

System.config({
    bundles: {
      'build/core': ['jquery']
    }
});
System.import('app/main.js');
Run Code Online (Sandbox Code Playgroud)

不知道如何使用它,因为现在我们不会使用CDN来托管jQuery.所以对我而言,这有点像是一个问题22. JSPM非常棒,因为它为您提供了包管理,但是要在生产中使用您需要的包.因此,如果我们必须在页面中包含脚本标记,那么首先不会破坏JSPM的目的吗?

关于如何制作一个漂亮而简单的开发/制作工作流程的任何想法,当我们想要在两者之间切换时,我们不必更改代码?我们想要这样的东西:

$ npm运行生产

$ npm运行开发

这样,在运行两者之前无需在页面中更改任何类型的HTML.我在不同的SystemJS和JSPM工作流程上查了几个小时,似乎无法找到解决所有问题的方法.

SystemJS是否在任何地方用于生产,或者这仍然被认为是一种实验性技术?我已经看到有一个新的即将推出的HTTP/2标准,它将动态地动态加载模块,这是否意味着它切换到SystemJS或者被遗忘?

Ian*_*her -1

我以前没有使用过 systemJS 来捆绑东西,但是为 jquery 映射 CDN 是否有效?即您可以通过以下方式将 CDN 用于 Angular 和 rxjs:

map: {
    ...
    '@angular': 'https://npmcdn.com/@angular',
    'rxjs': 'https://npmcdn.com/rxjs@5.0.0-beta.6',
    'jquery': 'http://jquery.cdn'
}
Run Code Online (Sandbox Code Playgroud)

这样的事情能为您解决问题吗?我认为这意味着您将无法将 jquery 用作全局变量,并且需要导入它,但是转向这样的工作流程可能会有所帮助?