- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
场景
我正在使用具有特定命名空间的代码库。但是部分代码库是本地的,其他几个部分是 npm 模块,它们都属于同一个命名空间。
问题
我正在尝试确定是否可以在 SystemJS 配置中“覆盖” map 别名?我遇到的问题是我想为库的本地版本声明一个基本别名,然后为 npm 模块声明更具体的映射别名。
尝试 1
最初我认为这样做是可能的:
{
bundles: {
'bx/google/drive': ['bx/google/drive/files', 'bx/google/drive/permissions', 'bx/google/drive/query']
},
map: {
'bx/': '/src/bx',
'bx/google/core': 'node_modules/bx.google.core/bundles/bx.google.core.js',
'bx/google/drive': 'node_modules/bx.google.drive/bundles/bx.google.drive.js',
'bx/google/analytics': 'node_modules/bx.google.analytics/bundles/bx.google.analytics.js',
'typescript': 'node_modules/typescript/lib/typescript.js',
'systemjs': 'node_modules/systemjs/dist/system.src.js'
},
packages: {
bx: {
defaultExtension: 'js'
}
}
}
但这只使用了初始的 bx/
解析以该路径开头的任何导入的别名,因此无法加载任何 bx
npm 模块代码。
尝试 2
我想我可以定义所有的 bx
使用包映射的“子”模块:
System.config({
bundles: {
'bx/google/drive': ['bx/google/drive/files', 'bx/google/drive/permissions', 'bx/google/drive/query']
},
map: {
'bx': '/src/bx',
'typescript': 'node_modules/typescript/lib/typescript.js',
'systemjs': 'node_modules/systemjs/dist/system.src.js'
},
packages: {
bx: {
defaultExtension: 'js',
map: {
'./google/core': 'node_modules/bx.google.core/bundles/bx.google.core.js',
'./google/drive': 'node_modules/bx.google.drive/bundles/bx.google.drive.js',
'./google/drive/files': 'node_modules/bx.google.drive/bundles/bx.google.drive.js',
'./google/drive/permissions': 'node_modules/cx.google.drive/bundles/bx.google.drive.js',
'./google/drive/query': 'node_modules/bx.google.drive/bundles/bx.google.drive.js',
'./google/analytics': 'node_modules/bx.google.analytics/bundles/bx.google.analytics.js'
}
}
}
});
这会失败,但方式不同,因为在使用导入的类之前不会抛出任何错误,就像任何bx
一样。从 npm 模块导入的类是 undefined
. (我还必须明确定义所有包导入路径)。
目前的解决方案
到目前为止我发现的唯一方法是删除 bx/
来自 map 的定义,并明确列出每个 map 别名和代码包 /src/bx/
.即
{
bundles: {
'bx/google/drive': ['bx/google/drive/files', 'bx/google/drive/permissions', 'bx/google/drive/query']
},
map: {
'bx/forms': '/src/bx/forms',
'bx/preload': '/src/bx/preload',
'bx/cache': '/src/bx/cache',
/* etc */
'bx/google/core': 'node_modules/bx.google.core/bundles/bx.google.core.js',
'bx/google/drive': 'node_modules/bx.google.drive/bundles/bx.google.drive.js',
'bx/google/analytics': 'node_modules/bx.google.analytics/bundles/bx.google.analytics.js',
'typescript': 'node_modules/typescript/lib/typescript.js',
'systemjs': 'node_modules/systemjs/dist/system.src.js'
},
packages: {
'bx/forms': {
defaultExtension: 'js'
},
'bx/preload': {
defaultExtension: 'js'
},
'bx/cache': {
defaultExtension: 'js'
}
}
}
这不是很理想。
问题
所以我想知道的是,是否可以为本地 bx/
定义一个“基本” map 别名?代码 ( bx: 'src/bx'
),然后用 bx
的更具体的 map 别名覆盖它npm 模块?
** 更新**
添加基础 bx/
至 paths
无需列出所有 bx
路径分别作为 maps
中的唯一值, 但它们仍需要在 packages
中单独列出.
{
bundles: {
'bx/google/drive': ['bx/google/drive/files', 'bx/google/drive/permissions', 'bx/google/drive/query']
},
paths: {
'bx/': '/src/bx'
},
map: {
'bx/google/core': 'node_modules/bx.google.core/bundles/bx.google.core.js',
'bx/google/drive': 'node_modules/bx.google.drive/bundles/bx.google.drive.js',
'bx/google/analytics': 'node_modules/bx.google.analytics/bundles/bx.google.analytics.js',
'typescript': 'node_modules/typescript/lib/typescript.js',
'systemjs': 'node_modules/systemjs/dist/system.src.js'
},
packages: {
'bx/forms': {
defaultExtension: 'js'
},
'bx/preload': {
defaultExtension: 'js'
},
'bx/cache': {
defaultExtension: 'js'
}
}
}
最佳答案
在对 SystemJs 有了更好的理解后,我决定重新审视这个问题,并花了很多时间尝试不同的组合来解决这个问题。
经过多番摸索之后,我恼火地发现尝试 1 只需要一个小改动就可以正常工作(除非现在可以正常工作是由于 systemjs 更新?)
更改 bx
的 map
值来自:
'bx/': '/src/bx'
到:
'bx': '/src/bx',
解决了原来的问题。
{
bundles: {
'bx/google/drive': ['bx/google/drive/files', 'bx/google/drive/permissions', 'bx/google/drive/query']
},
map: {
'bx': '/src/bx',
'bx/google/core': 'node_modules/bx.google.core/bundles/bx.google.core.js',
'bx/google/drive': 'node_modules/bx.google.drive/bundles/bx.google.drive.js',
'bx/google/analytics': 'node_modules/bx.google.analytics/bundles/bx.google.analytics.js',
'typescript': 'node_modules/typescript/lib/typescript.js',
'systemjs': 'node_modules/systemjs/dist/system.src.js'
},
packages: {
bx: {
defaultExtension: 'js'
}
}
}
关于javascript - 是否可以覆盖 SystemJS 配置中的 map 别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36739971/
当我使用以下命令设置 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
我是一名优秀的程序员,十分优秀!