代码之家  ›  专栏  ›  技术社区  ›  A. Gladkiy

SystemJS捆绑应用程序对Angular 5的依赖性

  •  0
  • A. Gladkiy  · 技术社区  · 7 年前

    我有角5应用程序。我想尽可能缩小和捆绑我的应用程序。

    这是SystemJS的配置:

    (function (global) {
        System.config({
            paths: {
                'npm:': "node_modules/"
            },
            map: {
                app: "dist",
                '@angular/animations': "npm:@angular/animations/bundles/animations.umd.min.js",
                '@angular/animations/browser': "npm:@angular/animations/bundles/animations-browser.umd.min.js",
                '@angular/common': "npm:@angular/common/bundles/common.umd.min.js",
                '@angular/common/http': "npm:@angular/common/bundles/common-http.umd.min.js",
                '@angular/compiler': "npm:@angular/compiler/bundles/compiler.umd.min.js",
                '@angular/core': "npm:@angular/core/bundles/core.umd.min.js",
                '@angular/forms': "npm:@angular/forms/bundles/forms.umd.min.js",
                '@angular/http': "npm:@angular/http/bundles/http.umd.min.js",
                '@angular/platform-browser': "npm:@angular/platform-browser/bundles/platform-browser.umd.min.js",
                '@angular/platform-browser/animations': "npm:@angular/platform-browser/bundles/platform-browser-animations.umd.min.js",
                '@angular/platform-browser-dynamic': "npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.min.js",
                '@angular/platform-server': "npm:@angular/platform-server/bundles/platform-server.umd.min.js",
                '@angular/router': "npm:@angular/router/bundles/router.umd.min.js",
                // other libraries
                'angular-froala-wysiwyg': "npm:angular-froala-wysiwyg/bundles/angular-froala-wysiwyg.umd.min.js",
                'ngx-bootstrap': "npm:ngx-bootstrap/bundles/ngx-bootstrap.umd.min.js",
                'ngx-infinite-scroll': "npm:ngx-infinite-scroll/bundles/ngx-infinite-scroll.umd.min.js",
                'ngx-moment': "npm:ngx-moment/bundles/ngx-moment.umd.min.js",
                'moment': "npm:moment/min/moment.min.js",
                'rxjs': "npm:rxjs",
                'tslib': "npm:tslib/tslib.js",
                'jszip': "npm:jszip",
                'pako': "npm:pako",
                '@progress': "npm:@progress",
                '@telerik': "npm:@telerik"
            },
            packages: {
                app: {
                    main: "./main.js",
                    defaultExtension: "js"
                },
                rxjs: {
                    defaultExtension: "js",
                },
                jszip: {
                    defaultExtension: 'js',
                    main: './dist/jszip.js'
                },
                pako: {
                    defaultExtension: 'js',
                    main: './index.js'
                },
                'npm:@progress/kendo-angular-buttons': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-angular-charts': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-angular-dateinputs': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-angular-dropdowns': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-angular-dialog': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-angular-grid': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-angular-pdf-export': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-angular-inputs': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-angular-intl': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-angular-l10n': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-angular-excel-export': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-angular-layout': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-angular-scrollview': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-angular-sortable': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-angular-popup': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-angular-resize-sensor': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-angular-upload': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-charts': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-data-query': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-date-math': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-drawing': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-file-saver': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-intl': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-ooxml': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@progress/kendo-popup-common': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@telerik/kendo-draggable': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@telerik/kendo-dropdowns-common': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@telerik/kendo-intl': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                },
                'npm:@telerik/kendo-inputs-common': {
                    main: './dist/npm/main.js',
                    defaultExtension: 'js'
                }
            }
        });
    })(this);
    

    GulpFiel.JS:

    var gulp = require('gulp');
    var tsc = require('gulp-typescript');
    var systemjsBuilder = require('systemjs-builder');
    var angularEmbed = require('gulp-angular-embed');
    var del = require('del');
    
    var tsProject = tsc.createProject('tsconfig.json');
    var builder = new systemjsBuilder('', 'systemjs.config.js');
    
    gulp.task('bundle-config', function () {
        return gulp.src('systemjs.config.js')
            .pipe(gulp.dest('dist/configs'));
    });
    
    gulp.task('embed-template', ['bundle-config'], function () {
        return gulp.src('app/**/*.ts')
            .pipe(angularEmbed())
            .pipe(gulp.dest('dist2'));
    });
    
    gulp.task('tsc', ['embed-template'], function () {
        return gulp.src('dist2/app/**/*.ts')
            .pipe(tsProject())
            .js.pipe(gulp.dest('dist'));
    });
    
    gulp.task('clean', ['tsc'], function () {
        return del(['dist2/**']);
    });
    
    gulp.task('bundle-app', ['clean'], function () {
        return builder
            .bundle('[dist/**/*]', 'production/app.bundle.min.js', {
                    minify: true,
                    mangle: true
                })
            .then(function () {
                console.log('Build complete');
            })
            .catch(function (err) {
                console.log('Build error');
                console.log(err);
            });
    });
    
    gulp.task('bundle-dependencies', ['clean'], function () {
        return builder
            .bundle('dist/**/* - [dist/**/*.js]', 'production/dependencies.bundle.min.js', {
                    minify: true,
                    mangle: true
                })
            .then(function () {
                console.log('Build complete');
            })
            .catch(function (err) {
                console.log('Build error');
                console.log(err);
            });
    });
    
    gulp.task('production', ['bundle-app', 'bundle-dependencies'], function () { });
    

    和index.html包含以下内容:

    <!DOCTYPE html>
    <html>
    <head>...</head>
    <body>
      <my-app></my-app>
    
      <script src="node_modules/core-js/client/shim.min.js"></script>
      <script src="node_modules/zone.js/dist/zone.min.js"></script>
      <script src="node_modules/reflect-metadata/Reflect.js"></script>
      <script src="node_modules/systemjs/dist/system.js"></script>
    
      <script src="production/dependencies.bundle.min.js"></script>
      <script src="production/app.bundle.min.js"></script>
      <script>
          System.import('dist/configs/systemjs.config.js').then(function() {
              System.import('app').catch(function(err){ console.error(err); });
          });
      </script>
    </body>
    </html>
    

    结果我在“dist”文件夹中编译了应用程序(JS文件中包含HTML)。我还有“生产”文件夹 app.bundle.min.js “我的所有应用程序文件和” dependencies.bundle.min.js “在这里,我所有的依赖,比如Angular、Kendo、RXJS框架。 当我启动我的应用程序时,它会分别加载这两个小型文件和所有依赖项,例如:

    /node_modules/rxjs/add/operator/mergeMap.js
    /node_modules/@progress/kendo-angular-grid/dist/npm/data/data.iterators.js
    /node_modules/@angular/animations/bundles/animations.umd.min.js
    

    但他们都在 依赖项.bundle.min.js “。

    我如何解决?

    1 回复  |  直到 7 年前
        1
  •  0
  •   A. Gladkiy    7 年前

    我只是放 systemjs.config.js 在我的包文件和它帮助我之前:

    ...
    <body>
        <ac-app></ac-app>
    
        <script src="systemjs.config.js"></script>
        <script src="production/dependencies.bundle.min.js"></script>
        <script src="production/app.bundle.min.js"></script>
        <script>
            System.import('app')
                .catch(function (err) {
                    console.error(err);
                });
        </script>
    </body>
    ...
    
    推荐文章