Javascript ES6 - 在不同的 .js 文件中导入函数或变量之前等待模块完成执行

2024-02-14

我是 ES6 和导入/导出模块的新手,我对如何实现我想要的东西感到困惑。我有一个 .js 文件用于初始化 SDK,并且必须等待 dom 内容首先加载。

我还有其他较小的 .js 文件,我想在其中编写从第一个文件引用/导入应用程序对象的方法。但是,如果不将 DOMContentLoaded 中的所有内容也包装在这些较小的文件中,我就无法让它工作。

我想有一个更好的方法,而且我也认识到我在这里的整体方法可能会失败 - 我对 Javascript 相对较新,总的来说,我正在尝试找出将内容分解为多个 .js 文件以实现更清洁的最佳方法代码。谢谢。

// initializeSdk.js

import createApp from '@shopify/app-bridge';
export {app} // i want to export this object so other .js files can use it

var app;

document.addEventListener('DOMContentLoaded', () => {
    var data = document.getElementById('shopify-app-init').dataset;
        
    app = createApp({
      apiKey: data.apiKey,
      shopOrigin: data.shopOrigin,
      forceRedirect: true
    });

    return app;
});
// otherFile.js

import {app} from './initializeSdk.js';

console.log('app is ' + app) // returns undefined

  document.addEventListener('DOMContentLoaded', () => {
      console.log('app after waiting is ' + app) // this returns app object
  });


我认为构建这个的最好方法是让你的initializeSdk显式入口点,同时导入使用它的其他所需模块。例如:

// index.js

import createApp from '@shopify/app-bridge';
import { somethingThatUsesApp } from './somethingThatUsesApp';

document.addEventListener('DOMContentLoaded', () => {
    const data = document.getElementById('shopify-app-init').dataset;
    const app = createApp({
      apiKey: data.apiKey,
      shopOrigin: data.shopOrigin,
      forceRedirect: true
    });
    somethingThatUsesApp(app);
});
// somethingThatUsesApp.js
export const somethingThatUsesApp = (app) => {
  console.log('app is ' + app)
};

国际海事组织,有一个单一入口点,而其他模块导出功能only(可能将运行时依赖项作为参数)是组织事物的更​​好方法之一。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript ES6 - 在不同的 .js 文件中导入函数或变量之前等待模块完成执行 的相关文章

  • OpenLayers:放大或缩小后,被破坏的特征会重新出现

    我有一个 OpenLayers Bing 地图应用程序 可以显示危险废物站点 用户可以单击链接来切换地图上站点的子站点 当我通过调用层上的 destroyFeatures 来关闭子站点 它们是向量层上的点 时 它们会按预期消失 但是 如果我
  • 检查复选框是否被选中? [复制]

    这个问题在这里已经有答案了 如何通过 jQuery 检查复选框是否被选中 我可以只向元素添加 ID 或类并执行此操作吗 if element val 1 do stuff if element is checked checkbox is
  • jQuery 模式窗口从我的表单中删除元素

    jQuery 当我用它创建一个包含表单元素的模式窗口时 当我提交表单时 它会取出这些元素 表格示例
  • javascript - 动态变量

    您好 我正在尝试创建动态变量 但它说 变量 v0 到 v5 未定义 td each function i eval var v i this html 任何帮助将不胜感激 这听起来是个坏主意 你有什么理由不能这样做吗 var tdHtml
  • Firefox(仅限)动态表单操作不起作用

    控制台为操作属性返回空白 我已经移动了 file upload attr action io cfm action updateitemfile item id agenda modal attr data defaultitemid 周围
  • 使用 ES6 静态函数时,我得到“没有这样的方法”

    我正在尝试为我在 React Native 中工作的项目创建一个包含静态函数的 utils 类 我读到了如何在 StackOverFlow 中创建静态函数question https stackoverflow com questions
  • Javascript:打乱数组中的对象组

    我有一个对象数组 我已按键排序 group如下 使得所有具有相同值的对象group在索引中彼此相邻data 例如 var data foo cat group house foo cat group house foo cat group
  • 开始使用 Three.js 中的行进立方体

    我是 Three js 的新手 正在寻找教程来帮助我开始了解如何在 Three js 中使用 Marching Cubes 到目前为止 我在 Three js 中看到的一些使用它的项目对我来说有点复杂 所以一个简单的教程会很好 谢谢 像您一
  • JSLint 错误:意外的“这个”

    无法理解为什么 JSLint 对我的使用感到惊讶this在下面的代码中 function testConstr x use strict this joker Whyyy sooo seriousss this x x 对于这两个属性分配
  • 未捕获的安全错误:阻止了具有原点的框架...访问具有原点的框架

    我已经为 SAP 解决方案 无论什么 制作了一个组件 该组件通过 iframe 嵌入到报告中 在 SAP 平台 BO 上部署报告后 我收到此错误 在 Chrome 上 但在 IE 或 FF 上也不起作用 Uncaught SecurityE
  • 将 DIV 转换为单击并拖动视口

    有人知道一种不显眼的 基于原型或无框架的方法将具有大内容 例如地图 的 DIV 转换为具有固定尺寸的可点击和可拖动的 地图 容器 非常像 Google 地图 我想在大型输入表单中显示 HTML 块 这些块可能会超出可用空间 每个块可以有大约
  • Javascript - 对父母调用 super 父母?

    我在 Odoo 中定义了当前自定义 javascript 视图的扩展 openerp account move journal test function instance var t instance web t lt instance
  • 如何在没有 DOM 的情况下将 javascript 作为 node.js 脚本运行?

    https github com jasondavies d3 cloud https github com jasondavies d3 cloud是一个使用 D3 库的 javascript 文字云 这是一个交互式演示 http www
  • 什么是闭包编译器?

    如果您不知道我在说什么 请查看以下内容 http closure compiler appspot com home http closure compiler appspot com home 这是一个 JavaScript 压缩器 在他
  • 如何使表格单元格的最小宽度为 3 位数字?

    如何使表格中的每个单元格的最小宽度为 3 位数字且不会更大 现在我正在硬编码min width 但我不喜欢硬编码一个值 因为我将来可能想更改字体 如果需要Javascript也没关系 table border 1 tr td 1 td td
  • 响应覆盖 div 下的链接

    场景是这样的 我已经构建了一个顶部导航原型 它需要在其顶部有一个覆盖 透明 PNG 图像 目前它覆盖了大约 1 3 的链接 请看下面 有什么方法可以让前 1 3 的链接做出响应 即使有一个 div div 部分覆盖它们 覆盖层不会包含任何可
  • html 下钻下拉所选值未插入 MYSQL

    我有两个下拉列表 首先从数据库下拉填充 根据第一个下拉列表的选定值从数据库填充第二个下拉列表 document ready function c change function var c1 c selected text if c1 aj
  • 将响应式网格布局转换为 Plotly Dash

    我是一个非常活跃的 Dash 用户 我开始发现 Dash 使用中存在很多限制 并且我意识到有关如何将组件转换为 Dash 的信息 内容绝对有限 并且示例过时且非常简单 并且我对 Javascript 或 React 几乎没有任何了解 我完全
  • 有没有用 Javascript 编写的开源 JSDoc 解析器?

    我正在寻找一个可以在我的项目中使用的 JSDoc 解析器 我正在寻找可以传递 JSDoc 注释并接收该注释含义的结构化描述的东西 我见过的大多数工具似乎都能够将 JSDoc 注释转换为 HTML 或其他格式 我正在寻找能够提供可用于输入其他
  • 如果列表在初始化之前为空,则 jQuery 可排序无法与水平列表正常工作

    如果我在初始化后将元素添加到列表中 sortable它无法正常工作 参见示例jsFiddle http jsfiddle net NQMPr 1 示例 HTML div class container div br

随机推荐

  • OpenCL clBuildProgram 缓存源代码,如果 #include 源代码发生更改,则不会重新编译

    我用opencl实现了一个项目 我有一个包含内核函数的文件 内核使用的函数包含在单独的头文件中 但是当我更改包含的文件时 有时会应用更改 有时则不会 这让我很困惑应用程序是否有错误 我检查了 stackoverflow 中的其他帖子 发现
  • 虚假 Ajax 请求

    为了检查ajax请求的提交情况 当用户提交表单时 我使用jasmine 1 实现了以下测试 测试已成功通过 但查看 javascript 控制台时出现以下错误500 Internal Server Error 由于我不关心服务器响应 所以我
  • 以集群模式在同一物理节点上运行 Storm nimbus 和supervisor

    我现在有一个包含 2 个物理节点的 Storm 集群 我在跑storm nimbus在节点 1 上和storm supervisor在节点 2 上 看起来我的所有拓扑都仅在节点 2 管理节点 上运行 我也应该在节点 1 上运行主管吗 Tha
  • 如何使用 for_each 删除 STL 映射中的每个值?

    假设我有一个 STL 映射 其中的值是指针 并且我想将它们全部删除 我如何表示以下代码 但使用 std for each 我很高兴找到使用 Boost 的解决方案 for stdext hash map
  • 管理器中缺少应用程序图标

    我最近迁移了我的应用程序以支持 iOS7 并在此过程中更新了我的应用程序图标以使用资产目录 这一切在应用程序中都运行良好 但是 在 Organizer 和 TestFlight 中 我的应用程序图标丢失了 同样的情况也发生在 TestFli
  • Google Maps API v3 向每个标记添加信息窗口

    注意 我使用的是 Google Maps API v3 我正在尝试为我在地图上放置的每个标记添加一个信息窗口 目前我正在使用以下代码执行此操作 for var i in tracks racer id data points values
  • 从 SJSIR “手动”构建 JS

    我需要在运行时从 sjsir 文件构建一个 js 文件来实现插件系统 这样就无法在编译时与我的其余编译一起完成 我曾经在 0 6 3 中使用以下代码实现相同的过程 但它似乎已被弃用 您建议使用什么算法来实现与 0 6 13 相同的操作 谢谢
  • 更改博客主题(blogdown+netlify)

    我按照 Yihui 的教程并使用创建了一个网站blowdown github and netlify 现在 我想更改我的网站的主题 问题是我有几篇文章产生了很多情节 因此 当我在本地创建一个新网站并添加我的帖子时 git push失败 我怀
  • Xcode 12 Beta - 找不到模拟器运行时

    我已经安装了 Xcode 12 beta 2 我尝试通过 Mac OS Catalina 上的 Jenkins 运行我们的 xamarin 项目 它失败并出现以下错误 当我从 Mac Visual studio 构建相同的项目时 它成功了
  • 有没有办法在网页开发中使用加色混合?

    我有一个可以使用的网页设计加法混色 http en wikipedia org wiki Additive color 想要的效果是 红色方块覆盖绿色方块 重叠区域呈现黄色 有没有什么好方法可以使用标准工具 CSS CSS 透明度 不透明度
  • 内联块+最小/最大宽度行为

    我在许多浏览器 FF Opera Ie 中看到我给它们的元素 内联块 和 最小 最大宽度 它们的宽度自动设置为 最小宽度 而不是最大宽度 如预期的那样 这是正常行为吗 我可以用CSS方式解决它 具有最大宽度的内联块元素 吗 我了解 floa
  • 快速输入输出功能

    define getcx getchar unlocked inline void inp int n fast input function n 0 int ch getcx int sign 1 while ch lt 0 ch gt
  • 为什么 tkinter 的 after() 函数会冻结我的窗口?

    我正在使用创建 dodger 的副本tkinter 我面临着计时对象移动的问题 有人告诉我时间模块不能很好地工作tkinter 因此我应该使用after 反而 但是 我面临着同样的问题after 功能就像我对时间模块所做的那样 这是我的代码
  • 特定git命令的颜色输出

    我正在编写一个运行 git 命令并捕获输出的工具 并且我希望将输出着色 Git 注意到该工具不是终端 因此color ui需要设置为always 我真的不想在全局 存储库配置文件中设置它 因为它会与使用 git 的其他程序混淆 这git b
  • 循环访问 Azure 管道中的变量

    我有一个文本文件 其中有两个名称client1 and client2 我有一个 Powershell 脚本来读取文本文件 我对它的理解是它已经创建了一个数组 clientvariable Get Content Path FilePath
  • 计划错误:尚未使用 Cloud Resource Manager API

    当我尝试跑步时 steps id Plan Terraform name hashicorp terraform light args plan 在 Cloud Build 中 我收到错误 Error Error reading Proje
  • 垃圾收集器对java中的静态变量或方法起作用吗?

    我正在创建一个示例演示程序 以便让我了解如何使用垃圾收集器在 java 中释放静态变量 方法的引用 我使用弱引用是为了不阻止垃圾收集器 Class Sample public class Sample private static Stri
  • 如何激活 Autodesk Forge Snapper?

    我正在尝试激活自查看器版本 7 3 以来实施的新 Snapper 扩展 所以我像这样加载扩展 viewer loadExtension Autodesk Snapping 似乎有效 之后 我尝试访问类似的描述方法 但总是收到此错误 getS
  • PopupWindow 上的视图可以显示 PopupMenu 吗?

    在 Android API11 中 我在 PopupWindow 内显示一个按钮 我想在单击按钮时显示 PopupMenu 而不关闭 PopupWindow 这有可能吗 我正在实例化并初始化 PopupMenu 但是当我调用 popupMe
  • Javascript ES6 - 在不同的 .js 文件中导入函数或变量之前等待模块完成执行

    我是 ES6 和导入 导出模块的新手 我对如何实现我想要的东西感到困惑 我有一个 js 文件用于初始化 SDK 并且必须等待 dom 内容首先加载 我还有其他较小的 js 文件 我想在其中编写从第一个文件引用 导入应用程序对象的方法 但是