gpt4 book ai didi

Angular 2.2 和 SystemJS : deploy RXJS

转载 作者:太空狗 更新时间:2023-10-29 17:37:05 26 4
gpt4 key购买 nike

我正在部署一个网站,但我无法“捆绑”rxjs,因为我使用的是 Angular 的最终版本。我只能通过复制我网站上的整个文件夹 node_modules/rxjs 来部署 rxjs。

这是我的 SystemJS 配置

    System.config({
map: {
'lodash':'http://127.0.0.1/js/lodash.min.js',
'@angular/core': 'http://127.0.0.1/js/core.umd.min.js',
'@angular/compiler': 'http://127.0.0.1/js/compiler.umd.min.js',
'@angular/common': 'http://127.0.0.1/js/common.umd.min.js',
'@angular/http': 'http://127.0.0.1/js/http.umd.min.js',
'@angular/platform-browser': 'http://127.0.0.1/js/platform-browser.umd.min.js',
'@angular/platform-browser-dynamic': 'http://127.0.0.1/js/platform-browser-dynamic.umd.min.js',
'@angular/router': 'http://127.0.0.1/js/router.umd.min.js',
'@angular/forms': 'http://127.0.0.1/js/forms.umd.min.js',
'@angular/upgrade': 'http://127.0.0.1/js/upgrade/bundles/upgrade.umd.js',
'rxjs':'http://127.0.0.1/js/vendors.bundle.js'
},
packages: {
'/js': {
defaultExtension: 'js'
}
},
bundles: {
'/js/app.bundle': ['main']
}
});

document.addEventListener('DOMContentLoaded', function () {
System.import('main').then(null, console.error.bind(console));
});

我使用以下 Gulp 脚本将 rxjs 包含在 vendors.bundle.js 中:

    gulp.task('vendor.bundle', function() {
gulp.src([
'node_modules/systemjs/dist/system-polyfills.js',
'node_modules/zone.js/dist/zone.min.js',
'node_modules/reflect-metadata/Reflect.js',
'node_modules/systemjs/dist/system.src.js',
'node_modules/rxjs/bundles/Rx.min.js'
])
.pipe(concat('vendors.bundle.js'))
//.pipe(uglify())
.pipe(gulp.dest('./dist/js'));
});

我有如下错误:

VM9314:3GET http://127.0.0.1/js/vendors.bundle.js/add/operator/map.js 404 (Not Found) ... Error loading http://127.0.0.1/js/vendors.bundle.js/add/operator/map.js as "rxjs/add/operator/map" from http://127.0.0.1/services/global-services/global.services

这是一个问题,因为当我们部署整个文件夹时,会生成大量请求以获取所有 rxjs/*.js 文件,这意味着主要在移动设备上的性能不佳。

当我只部署 Rx.min.js 文件时,我没有遇到性能问题。

有人能告诉我如何使用 Angular 2.2 和 SystemJS 部署 rxjs 吗?

最佳答案

感谢@martin! :)

解决方法如下:1. 使用 Gulp(在我的例子中)和 systemjs-builder

构建您自己的 Rx.min.js
var SystemBuilder = require('systemjs-builder');
gulp.task('rxjs.bundle', function () {
var builder = new SystemBuilder('./', {
paths: {"rxjs/*": "node_modules/rxjs/*.js"},
map: {"rxjs": "node_modules/rxjs"},
packages: {"rxjs": {main: 'Rx.js', defaultExtension: "js"}}
});

builder.bundle('rxjs', 'dist/js/Rx.min.js', {
sourceMaps: true,
minify: true,
mangle: true
});
});

2.在您的SystemJS 配置文件 中声明您的包。

System.config({
map: {
'lodash':'http://127.0.0.1/js/lodash.min.js',
'@angular/core': 'http://127.0.0.1/js/core.umd.min.js',
'@angular/compiler': 'http://127.0.0.1/js/compiler.umd.min.js',
'@angular/common': 'http://127.0.0.1/js/common.umd.min.js',
'@angular/http': 'http://127.0.0.1/js/http.umd.min.js',
'@angular/platform-browser': 'http://127.0.0.1/js/platform-browser.umd.min.js',
'@angular/platform-browser-dynamic': 'http://127.0.0.1/js/platform-browser-dynamic.umd.min.js',
'@angular/router': 'http://127.0.0.1/js/router.umd.min.js',
'@angular/forms': 'http://127.0.0.1/js/forms.umd.min.js',
'@angular/upgrade': 'http://127.0.0.1/js/upgrade/bundles/upgrade.umd.js'
},
packages: {
'/js': {
defaultExtension: 'js'
}
},
bundles: {
'/js/Rx.min.js': [
"rxjs/*",
"rxjs/operator/*",
"rxjs/observable/*",
"rxjs/add/operator/*",
"rxjs/add/observable/*",
"rxjs/util/*"
],
'/js/app.bundle': ['main']
}
});

document.addEventListener('DOMContentLoaded', function () {
System.import('main').then(null, console.error.bind(console));
});

伟大的马丁,我很挣扎,解决方案是在很长的讨论中深入的。我完全错过了:)

更新!

在我测试了该解决方案之后,我可以确认性能得到了极大的提升!!加载我的主页的持续时间大约是 15 秒,现在只有 3 秒!!

关于 Angular 2.2 和 SystemJS : deploy RXJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41102541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com