gpt4 book ai didi

javascript - 是否可以覆盖 SystemJS 配置中的 map 别名?

转载 作者:行者123 更新时间:2023-11-29 15:28:48 26 4
gpt4 key购买 nike

场景

我正在使用具有特定命名空间的代码库。但是部分代码库是本地的,其他几个部分是 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 更新?)

更改 bxmap 值来自:

'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/

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