- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为延迟加载的模块创建单独的包。代码如下:
Gulp 代码:
var lazyLoadModules = [{
name: 'eventsModule',
path: path +'components/events/**/*.js'
}, {
name: 'crisisModule',
path: path + 'components/crisis-center/**/*.js'
}];
module.exports = function(systemJsConfig) {
var defaultSystemJsConfig = config.src + 'systemjs.conf.js';
systemJsConfig = systemJsConfig || defaultSystemJsConfig;
gulp.task('build-systemjs', function (done) {
runSequence('tsc-app', buildSJS);
function buildSJS () {
var builder = new Builder();
builder.loadConfig(systemJsConfig).then(function() {
builder.buildStatic(
path + 'main.js',
config.build.path + 'js/appBundle.js',
config.systemJs.builder
);
lazyLoadModules.map(function(item) {
builder.bundle(
item.path + ' - ' + path + 'main.js',
config.build.path + 'js/' + item.name + '.js',
config.systemJs.builder
);
});
}).then(function() {
util.log('Build complete');
done();
}).catch(function (ex) {
util.log('Build failed', ex);
done('Build failed.');
});
}
});
};
用于捆绑的 SystemJSBuilder 的 SystemJS 代码:
(function(global) {
// ENV
global.ENV = global.ENV || 'development';
// map tells the System loader where to look for things
var map = {
'app': 'src/app'
};
// packages tells the System loader how to load when no filename and/or no extension
var packages = {
'app': {
defaultExtension: 'js'
},
'rxjs': {
defaultExtension: 'js'
}
};
// List npm packages here
var npmPackages = [
'@angular',
'rxjs',
'lodash'
];
// Add package entries for packages that expose barrels using index.js
var packageNames = [
// App barrels
'app/shared',
// 3rd party barrels
'lodash'
];
// Add package entries for angular packages
var ngPackageNames = [
'common',
'compiler',
'core',
'forms',
'http',
'platform-browser',
'platform-browser-dynamic',
'router'
];
npmPackages.forEach(function (pkgName) {
map[pkgName] = 'node_modules/' + pkgName;
});
packageNames.forEach(function(pkgName) {
packages[pkgName] = { main: 'index.js', defaultExtension: 'js' };
});
ngPackageNames.forEach(function(pkgName) {
map['@angular/' + pkgName] = 'node_modules/@angular/' + pkgName +
'/bundles/' + pkgName + '.umd.js';
});
var config = {
map: map,
packages: packages,
bundles: {
'build/js/eventsModule.js': ['app/components/events/events.module'],
'build/js/crisisModule.js': ['app/components/events/crisis-center.module']
},
};
// filterSystemConfig - index.html's chance to modify config before we register it.
if (global.filterSystemConfig) { global.filterSystemConfig(config); }
System.config(config);
})(this);
然后在index.html中,我加载appBundle.js,一切正常。但是当我导航到事件模块时,这是一组延迟加载的。它失败我正在使用 systemjs 在 UI 端动态加载模块。
SystemJS 代码
(function() {
var config = {
bundles: {
'build/js/eventsModule.js': ['app/components/events/events.module'],
'build/js/crisisModule.js': ['app/components/events/crisis-center.module']
}
};
SystemJS.config(config);
})(this);
最佳答案
通过讨论 here 解决了问题:
根据讨论,我需要使用 bundle 而不是静态 bundle 来进行捆绑过程。所有 bundle 都由 SystemJS 加载,因此无需创建静态 bundle 。然后我使用了这个片段:
builder.bundle(
config.app + '**/*.js - [' + config.app + '**/*.js]',
paths.commonBundle,
config.systemJs.builder
).then(function() {
builder.bundle(
config.app + 'main.js - ' + paths.commonBundle,
paths.appBundle,
config.systemJs.builder
).then(function() {
lazyLoadModules.map(function (item) {
builder.bundle(
config.app + item.entryPoint + ' - ' + paths.commonBundle + ' - ' + paths.appBundle,
config.build.path + 'js/' + item.bundleName,
config.systemJs.builder
);
});
});
});
然后我使用 SystemJS 动态加载这些包。
System.config({
map: map,
packages: packages,
bundles: {
'build/js/app.bundle.js': ['app/main.js', 'environments/environment', 'app'],
'build/js/events.bundle.js': ['app/components/events/events.module.js']
}
});
关于javascript - Angular 2 SystemJS 延迟加载捆绑问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42680963/
当我使用以下命令设置 jspm 安装时: jspm init 然后它只询问我初始配置: Would you like jspm to prefix the jspm package.json prop
我正在使用标准的 ngUpgrade 模块将 AngularJS 应用程序升级到 Angular。我已将服务转换为 Angular,我需要将其降级以便在现有的 AngularJS 模块中使用它。我正在
我正在 SystemJS+Typescript 环境中运行 Jasmine 测试(基本上 a plunk 这应该是 Angular 2 测试平台)。 Jasmine 有意用作全局库,而不是通过 Typ
我有一个没有安装 systemJS 的项目。 这是 package.json: { "name": "mytest", "version": "0.1.0", "private": tru
我使用 SystemJS 作为模块系统来编译 TypeScript 文件,但每当我在浏览器中加载页面时(通过 live-server ),我都会收到以下错误: ReferenceError: Sens
我正在尝试将我的应用程序与 webpack 捆绑在一起,然后将其包含在带有 SystemJS 的父应用程序中,我有点迷失了。 我已经创建了我的包,我已经尝试将它转换为 commonjs/umd/amd
我无法让 systemjs 工作,所以它解析节点模块。 我的 index.html 中有以下内容: System.import('blast/test') .the
我正在尝试遵循 Angular 2 设置指南,但遇到了问题。我正在使用 browsersync,我似乎无法弄清楚如何让这段代码工作。 ....... System.import('./a
有没有办法等到所有 System.register(从 ES6 转译而来)都被解析和加载? 这对于 e2e testing in Angular 特别有用和其他小东西。 最佳答案 System.imp
我有一个非常基本的 config.js文件按预期工作,只要它部署在根 URL 下。这是样本 config.js文件: System.config({ //use typescript for co
我想导入 Angular,实例化 AngularJS 模块,然后导入另一个需要实例化 Angular 的文件: import angular from 'angular'; var app = ang
在尝试让 Angular (1.x) 与 systemjs 一起工作时,我意识到目前没有能力(据我所知)自动将 $inject 插入到 Angular 组件中,这使得即使函数的参数被缩小器破坏,组件也
我正在使用 jspm 和 SystemJS 导入 ES2015 模块。 是否可以通过 System 对象或其他任何地方获取项目中所有导入模块的列表?我可以通过 System._loader.modul
我正在使用 JSPM、AngularJS、TypeScript、SystemJS 和 ES6 并且我的项目运行得很好......除非我尝试使用 momentJS。 这是我得到的错误: TypeErro
有人可以告诉我如何使用 SystemJS 将简单的 javascript 文件加载到浏览器中。 我正在尝试使用以下语法从我的node_modules文件夹加载jquery: packages: {
我在使用 systemjs-builder 构建我的应用程序时遇到问题。 这是我的应用程序的结构。 这是要构建的函数: var systemjsBuild = { map: {
有人让 SystemJS 和 SignalR 一起工作吗?我一直在尝试使用 SystemJS(来自 jspm)加载 SignalR,但无论我做什么,异步加载器总是存在竞争条件。大约一半的加载时间,Si
我正在使用 Angular2,并且我想包含 jQuery。 systemjs.config.js (function (global) { System.config({ paths: { '
我在所有项目中都使用 SystemJs 和 JSPM,感觉太棒了。使用前端库变得前所未有的简单,使用 JSPM 我可以通过几个简单的步骤来完成: 命令行:jspm 安装角度 index.ts|js:i
我无法使用 SystemJS (0.19.47) 正确加载 RxJS 基本上我有一些 TypeScript…… import {BehaviorSubject} from "rxjs"; let s
我是一名优秀的程序员,十分优秀!