javascript - 如何组合(缩小)已编译的 Angular 2 组件?

标签 javascript angular minify

试图缩小生产项目的编译源代码, 我使用 Gulp 作为任务运行器。

源文件看起来是这样的,

html

<!--... . .  various scripts and styles . . . . . --->
<script src="node_modules/angular2/bundles/angular2.dev.js"></script>
<script src="node_modules/angular2/bundles/router.dev.js"></script>
<script src="node_modules/angular2/bundles/http.dev.js"></script>

<script>
  System.config({
    packages: {        
      app: {
        format: 'register',
        defaultExtension: 'js'
      }
    }
  });
  System.import('app/main')
        .then(null, console.error.bind(console));
</script>
</head>
<body>
  <app></app>
</body>

我的app目录结构如下,

.
├── main.js
├── main.js.map
├── main.ts
├── main.app.js
├── main.app.js.map
├── main.app.ts
├── x.component1
│   ├── x.component.one.js
│   ├── x.component.one.js.map
│   └── x.component.one.ts
└── x.component2
    ├── x.component.two.js
    ├── x.component.two.js.map
    └── x.component.two.ts

app/main.ts

import {bootstrap}    from 'angular2/platform/browser';
import {MyAwesomeApp} from './main.app'

bootstrap(MyAwesomeApp);

主程序.ts

@Component({
    selector: 'app',
    template: `
        <component-1></component-1>

        <component-2></component-2>
    `,
    directives: [Component1, Component2]
})


export class MyAwesomeApp {

}

然后是组件,

@Component({
    selector: 'component-1',
    template: `
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Beatae ducimus, saepe fugit illum fuga praesentium rem, similique deserunt tenetur laudantium et labore cupiditate veniam qui impedit, earum commodi quasi sequi.
    `
})


export class Component1 {

}

@Component({
    selector: 'component-2',
    template: `
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Beatae ducimus, saepe fugit illum fuga praesentium rem, similique deserunt tenetur laudantium et labore cupiditate veniam qui impedit, earum commodi quasi sequi.
    `
})


export class Component2 {

}

所有的 TypeScript 文件都被编译成 ES5 JavaScript,进一步需要压缩成 main.js

所以我的问题是,

  1. 我可以运行一个任务来收集所有已编译的 .js 文件以缩小为单个文件并在生产分支中将其作为 main 引用吗?
  2. 这会破坏模块系统 import {x} from 'y' 吗?
  3. 如果它破坏了模块加载系统,如何在 Angular 2 应用程序上连接文件?

我的 TypeScript 版本是 1.8.2

感谢您的帮助。

最佳答案

如果您想将所有 TypeScript 文件编译成一个文件,您需要使用 TypeScript 编译器的 outFile 属性。它可以通过 gulp-typescript 插件进行配置。

这样你就不需要配置 SystemJS 来根据文件名加载模块:

<script>
  // Not necessary anymore
  /* System.config({
    packages: {        
      app: {
        format: 'register',
        defaultExtension: 'js'
      }
    }
  }); */
  System.import('app/main')
        .then(null, console.error.bind(console));
</script>

模块名称及其内容现在都存在于这个文件中。 Angular2 发行版的打包包文件(angular2.dev.jshttp.dev.js、...)也是如此。要使用此文件,只需将其包含在 script 元素中即可。

这样你就不会破坏模块导入。

然后你可以使用 gulp 的 uglify 插件缩小这个单个文件...

关于javascript - 如何组合(缩小)已编译的 Angular 2 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35811126/

相关文章:

Angular2路由到错误的页面

Angular(ng 测试)调试 - VS 代码不会在断点处停止

css - Gulp 缩小 css 在 IE9 中不起作用

javascript - 适用于 Mac 的免费应用程序,用于混淆和缩小 javascript/php/html

javascript - 使用 HTML5 进行打印设计

javascript - 正则表达式 - 从文本输入中删除美元符号

javascript - 以编程方式显示基于 IP 国家/地区的 Div

javascript - 无法获得涉及 Angular 上的 Jasmine spy 的有效断言

javascript - 如何在 Play 2.3.1 模板中启用缩小的 JavaScript 文件?

javascript - 停靠在主页脚顶部的粘性页脚