- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试通过 SystemJS 从他们的 CDN 加载 Cycle DOM,例如:
System.config({
map: {
'cycle-dom': 'https://unpkg.com/@cycle/dom@17.1.0/dist/cycle-dom.js',
'xstream': 'https://cdnjs.cloudflare.com/ajax/libs/xstream/10.3.0/xstream.min.js',
}
});
System.import('cycle-dom', cycleDOM => {
...
});
但我很快发现 cycle-dom 需要 xstream
。所以我尝试同时加载:
Promise.all([
System.import('xstream'),
System.import('cycle-dom')
])
.then(([xs, cycleDOM]) => {
...
});
但我仍然得到同样的错误。看起来 cycle-dom
期望 xstream
在首次加载时存在于 window
上。所以我尝试了:
System.import('xstream')
.then(xs => window['xstream'] = xs)
.then(() => System.import('cycle-dom'))
.then(cycleDOM => {
...
});
我觉得我的做法全错了。我怎样才能做到这一点?
更新:
按照下面马丁的建议,我尝试将 xstream
配置为 cycle-dom
的依赖项。
Here's a jsbin that demonstrates.我正在做的是加载 cycle-run 和 cycle-dom,然后在 cycle 主页上运行示例。
但是我得到了错误:
"TypeError: Cannot read property 'default' of undefined"
Undefined 在这种情况下是 cycle-dom
试图加载 window['xstream']
,它没有被加载。
谢谢。
最佳答案
System.import()
调用返回一个 Promise,因此您需要将回调放入其 then()
方法(第二个参数是 the parent name ;不是回调)。
System.import('cycle-dom').then(function(cycleDOM) {
console.log(cycleDOM);
});
这会打印模块导出。
我没有任何使用 cycle.js
的经验,所以我不知道这是否足够。尽管如此,您可以使用 meta
config 设置此包依赖项:
System.config({
map: {
'cycle-dom': 'https://unpkg.com/@cycle/dom@17.1.0/dist/cycle-dom.js',
'xstream': 'https://cdnjs.cloudflare.com/ajax/libs/xstream/10.3.0/xstream.min.js',
},
meta: {
'cycle-dom': {
deps: [
'xstream'
]
}
}
});
同样,我不知道这是否足够。 SystemJS 文档包含很好解释的示例,说明如何加载需要注册一些全局变量的依赖项。参见 https://github.com/systemjs/systemjs/blob/master/docs/module-formats.md#shim-dependencies
编辑:
在这种情况下,它有点复杂。 cycle-run.js
脚本可能是由 browserify
生成的,您可以看到它包含如下一行:
var xstream_1 = (typeof window !== "undefined" ? window['xstream'] : typeof global !== "undefined" ? global['xstream'] : null);
这会检查加载时 window['xstream']
是否存在。这意味着必须在加载 cycle-run.js
脚本之前加载 xstream
。 SystemJS 的工作方式是加载请求的模块,然后加载其依赖项(您可以在 Developer Tools 中查看顺序)。所以它的顺序与您需要的顺序相反(这与 my question on SystemJS GitHub page 非常相似)。
这意味着您需要重组导入调用:
System.config({
// ...
meta: {
'xstream': {
format: 'global',
exports: 'xstream',
}
}
});
System.import('xstream').then(function() {
Promise.all([
System.import('cycle-run'),
System.import('cycle-dom'),
])
.then(([cycle, cycleDOM]) => {
// ...
});
});
这会在加载cycle-run
之前注册xstream
。此外,通过 xstream
的 meta
配置,可以确保 window.xstream
仅存在于这些回调中,不会泄漏到全局范围。
查看更新后的演示:https://jsbin.com/qadezus/35/edit?js,output
还要使用format
和exports
,您需要使用较新的SystemJS 0.20.*
而不是0.19.*
.
关于javascript - 使用 SystemJS 加载 CycleJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43132475/
当我使用以下命令设置 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
我是一名优秀的程序员,十分优秀!