【问题标题】:Calling a method inside an IIFE exported method在 IIFE 导出的方法中调用方法
【发布时间】:2021-07-18 18:55:22
【问题描述】:

我有一个脚本,我想使用 JS 模块公开一个函数,这个脚本是使用 esbuild 编译的。

预编译文件(index.mjs)

const NakamaWrapper = require("./nakama").default

var NakamaJS;

export default function InitNakama(host, port, useSSL) {
    NakamaJS = new NakamaWrapper(host, port, useSSL);
    NakamaJS.initiate();
}

esbuild 任务

"build-dev": "./node_modules/.bin/esbuild ./src/index.mjs --bundle --sourcemap --target=es2015 --outfile=./dist/dev/pc-nakama.js",

导出的代码(我注意到该函数在 IIFE 中)

html 中的代码:

import * as NakamaJS from "./pc-nakama.js"; 
NakamaJS.InitNakama("192.168.100.50", 7350, false);

错误:

NakamaJS.InitNakama is not a function

the source of my project is here

【问题讨论】:

  • 我对 esbuild 不熟悉,但如果它像 webpack 等其他打包工具一样工作,那么您还需要将导入脚本与您的模块一起编译。这当然意味着导入脚本不能是html文件,必须是js文件。这些系统的工作方式假设 html 文件只获取您的脚本,而没有做其他任何事情。你应该在 js 文件中做所有事情。
  • 没关系,我从 html 脚本标签加载了一个 IIFE 之外的模块,它可以工作。

标签: javascript es6-modules es6-module-loader esbuild


【解决方案1】:

输出格式默认为--format=iife,但您可以使用--format=esm 以ECMAScript 模块格式输出,这将与import 一起使用。文档在这里:https://esbuild.github.io/api/#format-esm

【讨论】:

    猜你喜欢
    • 2015-08-02
    • 1970-01-01
    • 2017-02-23
    • 2013-03-03
    • 2021-12-05
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多