使用多个 baseurl 的 ES6 异步模块

2024-01-09

ES6 模块系统似乎非常适合统一 CommonJs / AMD 语法。作为一个 requireJs/AMD 用户,我想转换为 ES6 模块(目前使用 babel.js)。

但似乎有一个问题;通读文档和教程,似乎无法加载依赖于多个 baseurl 的模块包。使用 requireJs 可以解决这个问题context field:

// async dependencies are loaded from http://path/to/domain
var contextedRequire1 = require.config({
  baseUrl: 'http://path/to/domain/js',
  context: 'mainContext'
});    

// async dependencies are located on http://path/to/otherdomain
var contextRequire2 = require.config({
  baseUrl: 'http://path/to/otherdomain/js',
  context: 'pluginContext'
});

contextedRequire1(['main.js'], function(main){
  // loaded using http://path/to/domain/js/main.js
  contextedRequire2(['plugin-lazyloading-deps.js'], function(plugin){
    plugin.init();
  });
});

在main.js中

define(['main-deps'], function(mainDeps){
  // loaded using http://path/to/domain/js/main-deps.js
})

在plugin-lazyloading-deps.js中

define(['require'], function(require){
  // loaded using http://path/to/otherdomain/js/plugin-lazyloading-deps.js
  if(Modernizr.touch) {
    require(['hammer'], function(){
      // loaded using http://path/to/otherdomain/js/hammer.js
      hammer.init();
    })
  }
})

在 ES6 异步模块导入中这是不可能的,因为System是一个单例

System.baseURL = "http://path/to/domain/js";
System.import("main").then(function(main){
  // loaded using http://path/to/domain/js/main.js

  // This will potentially break when main.js tries to load hammer.js from http://path/to/domain/js
  System.baseURL = "http://path/to/otherdomain/js";
  System.import("plugin-lazyloading-deps").then(function(){ /** code **/ });
});

我的问题是:文档中是否有我遗漏的内容(可能是 System 的子类,以便能够配置多个 baseUrl),或者这是未来模块扩展中的内容?


至少在当前版本的 SystemJS 中,您可以提供通配符路径。https://github.com/systemjs/systemjs/wiki/Configuration-Options#paths-unstable https://github.com/systemjs/systemjs/wiki/Configuration-Options#paths-unstable

我自己没用过,但对于你的情况,似乎你会这样做

System.baseURL = 'http://path/to/domain/js';
System.paths['plugin-*'] = 'http://path/to/otherdomain/js/plugin-*';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用多个 baseurl 的 ES6 异步模块 的相关文章

随机推荐

  • 当我停止 putty 时,如何在 ubuntu 14.04 上运行 jar 文件而不停止?

    我使用的是ubuntu 14 04 我正在运行一个 jar 文件 该文件应该在几天内收集大量数据 我正在运行 jar 文件 认为这个命令运行良好 java jar xxx jar 但是 当我关闭腻子时 该过程停止了 有没有办法让 jar 文
  • 在 Scala 中将 DataFrame 转换为 RDD[Map]

    我想转换创建的数组 如下所示 case class Student name String age Int val dataFrame DataFrame sql createDataFrame sql sparkContext paral
  • PostgreSQL 的 NGINX TLS 终止

    我一直在尝试使用 NGINX 作为 PostgreSQL 数据库的 TLS 终结器 但没有成功 当我尝试连接到数据库时 出现以下错误 服务器意外关闭连接 这可能意味着服务器在处理请求之前或处理过程中异常终止 当我删除ssl选项中listen
  • 无法让 mongoose-unique-validator 工作

    这不可能那么困难 但我总是收到默认的 mongoose 11000 错误 这是我的代码的简化版本 model import mongoose from mongoose import uniqueValidator from mongoos
  • 将 BlackBerry 应用程序设计得像 iPhone

    我正在将应用程序从 iPhone 移植到 BlackBerry BlackBerry 应用程序往往看起来不像 iPhone 那样精美 但自然地 我希望尽可能保持精美 而不破坏任何重要的 UI 约定 有没有任何 UI 组件可以帮助解决这个问题
  • 带图像的自定义标题

    我正在通过禁用标准标题并自己管理所有内容来为活动创建自定义标题 我想知道是否可以根据我的需要替换 主题标准标题 我可以通过更改 windowXYZStyle 项目来通过主题自定义大小 背景图像和文本 我唯一找不到的东西 如何添加图像而不是文
  • 设置 Qt QPushButton 弹出菜单的位置(向右)

    我正在为 Qt 按钮小部件编写弹出菜单 每当单击按钮时 就会弹出一个菜单 在按钮下方 默认情况下 弹出菜单位于下方左侧 有没有办法让弹出菜单在按钮下方的右侧弹出 没有设置位置的功能 所以我想知道是否有一些复杂的方法可以做到这一点 这是一些代
  • 在 Flask 的 url_for 函数中禁用字符转义

    Flask 有吗url for方法有一个选项可以禁用自动转义吗 所以如果我有一个名为getUser像这样的路线 user
  • pandas read_sql 在列名中删除点

    这是一个错误还是我做错了什么 我创建一个 df 将其放入 sql 表中 df 和表有一列 其中有一个点 现在 当我从 sql 表中读取 df 时 列名不一样 我编写了这段小代码 以便人们可以测试它 import sqlalchemy imp
  • 如何在不配置的情况下更改 npm 前缀?

    我不小心将 npm 前缀更改为不存在的地方 是否有一个我可以访问的配置文件可以让我将其更改回来 我能想到的唯一选择是 完全卸载节点 更改前缀后 npm 没有响应 https stackoverflow com questions 39250
  • H264 中的 Elementary Stream 是什么意思

    我读了 Elementary Stream 的内容维基百科 http en wikipedia org wiki Elementary stream 我正在使用的工具 Live555 需要 H 264 视频基本流文件 因此 当从视频应用程序
  • 在Java中仅获取路径目录并丢弃文件

    我们如何实际丢弃 java 字符串中的最后一个文件并仅获取文件路径目录 用户输入的随机路径 C my folder tree apple exe 期望的输出 C my folder tree 我找到的最接近的解决方案来自here https
  • Dockerfile 中 VOLUME 的用途是什么

    我试图更深入地了解 Docker 的体积 但我很难找出以下方面的差异 用例 The docker volume create command The docker run v path host path The VOLUME条目在Dock
  • 移动 N 天活跃用户 (BigQuery)

    我有一个由两列组成的 事件 表 userId eventDate s234124 2015 01 01 a2s3166 2015 01 02 c216782 2015 01 03 z312235 2015 01 04 userId 是用户
  • 如何将“ON更新当前时间戳”添加到现有表列

    我有一个列 例如 ts activity 其数据类型为 MYSQL 时间戳 默认值为当前时间戳 我想添加更新应用当前时间戳到该列值 我无法通过更改查询来执行此操作 在创建新表及其列时 我可以添加该列 但无法通过添加更新应用当前时间戳来修改现
  • 将 ExpressionEngine 成员导出到 WordPress

    我需要将所有成员从 ExpressionEngine 站点导出到 WordPress 我该怎么办呢 将它们全部移动 包括所有密码等 似乎是一项艰巨的任务 关于如何开始有什么想法吗 如果是这种情况 用户在登录新的 WordPress 站点时必
  • 为什么pip从10版本升级到18版本?

    运行时pip install脚本我收到以下警告 You are using pip version 10 0 1 however version 18 0 is available 这很奇怪 pip项目刚刚从版本10升级到版本18吗 为什么
  • 使用 SQLBrite + Retrofit 刷新数据

    这是我的用例 我正在开发一个应用程序 它通过 REST API 与服务器通信 并将接收到的数据存储在 SQLite 数据库中 它将其用作某种缓存 当用户打开屏幕时 必须发生以下情况 数据从数据库加载 如果可用 应用程序调用API刷新数据 A
  • C 或 C++ 中的函数类型

    我有一个简单的问题 C 或 C 中的函数类型是什么 由于我们可以在 C 或 C 中拥有指向函数的指针 这意味着函数应该具有特定的类型 否则在函数创建期间进行类型检查就没有任何意义 有人可以解释一下我是否走在正确的道路上吗 如果我走在正确的道
  • 使用多个 baseurl 的 ES6 异步模块

    ES6 模块系统似乎非常适合统一 CommonJs AMD 语法 作为一个 requireJs AMD 用户 我想转换为 ES6 模块 目前使用 babel js 但似乎有一个问题 通读文档和教程 似乎无法加载依赖于多个 baseurl 的