首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用esbuild加载引导JS

用esbuild加载引导JS
EN

Stack Overflow用户
提问于 2022-03-10 14:25:19
回答 1查看 623关注 0票数 5

我正试图在esbuild构建中导入引导JS

代码语言:javascript
复制
// index.js
import 'jquery-import'
import 'bootstrap'

// jquery-import.js
import jquery from 'jquery'
window.jQuery = window.$ = jquery;

构建目标是esm。问题是运行了以下引导代码:

代码语言:javascript
复制
factory(exports, require('jquery'), require('popper.js'));

这并不使用我的全局window.jQuery,而是需要它自己的,这意味着我的全局window.$.fn不包括引导扩展。而且,我认为这会使jQuery加载两次。

有没有一种在不修改引导源代码的情况下解决这个问题的方法?

有关这方面的更多背景资料:

引导源代码以以下语句开头(为了更好的可读性而稍微调整了一下):

代码语言:javascript
复制
(function (global, factory) {
  if (typeof exports === 'object' && typeof module !== 'undefined') {
    // Option 1: The route taken by esbuild
    factory(exports, require('jquery'), require('popper.js'));
  } else if (typeof define === 'function' && define.amd) {
    // Option 2
    define(['exports', 'jquery', 'popper.js'], factory);
  } else {
    // Option 2
    (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));
  }
}(this, function (exports, $, Popper) { 'use strict';

我已经尝试过注释单个选项,而仅采用已经在全球定义的window.jQuery,就不会有1、2或3的效果。

非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2022-03-29 13:14:27

它不能工作的原因,是由于某些原因,您的esbuild试图导入一个UMD文件(通常用于旧节点和浏览器混合代码)。

在查看了引导程序的package.json之后,似乎"module": "dist/js/bootstrap.js"将引导作为模块导出,这可能是esbuild应该引用的内容。

因此,要在不修复esbuild的情况下修复这个问题,我猜想您可以尝试:

代码语言:javascript
复制
import 'bootstrap/dist/js/bootstrap'

若要使用esbuild修复...or,请添加以下内容:

代码语言:javascript
复制
const buildOpts = {
  mainFields: ['module', 'main'],
}

此设置告诉绑定程序优先排序模块,然后是主入口点。

通常,这是main之前的模块,但它可能是相反的,因为您将平台设置为“节点”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71425748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档