使用ES6导入加载Bootstrap的最佳方法是什么?

qc6wkl3g  于 2023-05-11  发布在  Bootstrap
关注(0)|答案(6)|浏览(166)

我最近从使用Require.js切换到使用WebPack和Babel。在过去,我会在我的JS模块中使用CommonJS标准,就像这样

var $ = require('jquery');
require('bootstrap');

由于Bootstrap是一个jQuery插件,所以jQuery将首先加载,bootstrap将第二次加载。
Babel允许我使用ES6 import语句。但是当我写的时候

import $ from 'jquery';
import Bootstrap from 'bootstrap';

我得到的错误是$ is undefined。Bootstrap假设window.$存在,但import不会污染窗口对象,这是一件好事,但我的代码如下所示:

// legacy loading for bootstrap
var $ = require('jquery');
window.$ = $;
require('bootstrap');
// the rest of the imports
import _ from 'underscore';

一定有更好的解决办法。任何帮助感激不尽。

wlp8pajw

wlp8pajw1#

如果您的构建中有Webpack...

...你需要使用Webpack's provide plugin。由于错误是jQuery is not defined,我们将用插件 * 定义/提供 * 它:

webpack configuration中:

// webpack.config.js
...
plugins: [
  new webpack.ProvidePlugin({
    jQuery: 'jquery',
    $: 'jquery'
  })
]
...

现在,在ES6/2015 module中:

// main.js
...
// jquery is required for bootstrap
import $ from 'jquery'

// bootstrap
import 'bootstrap'

// bootstrap css 
import 'bootstrap/dist/css/bootstrap.css'
...

参考:https://2017-sparkler.rhcloud.com/2017/02/01/bootstrap-in-webpack-es6-2015-project/

祝你好运。

o3imoua4

o3imoua42#

Bootstrap 4解决方案

Bootstrap 4有两个依赖项:jQuery和Popper.js
1.安装必要的软件包:

npm install jquery popper.js bootstrap --save

1.在您的应用中,导入如下:

import 'bootstrap';
import 'bootstrap/dist/css/bootstrap.css';

1.如果你想在jQuery中全局使用$,请将以下内容添加到你的webpack配置中(对我来说是webpack.base.conf.js):

plugins: [
  new webpack.ProvidePlugin({
    $: 'jquery'
  })
]
ej83mcc0

ej83mcc03#

这里的一些答案说使用Webpack的ProvidePlugin
到2020年和bootstrap v4.4.1,您不需要使用该插件。
Bootstrap将jquerypopper.js定义为对等依赖项,因此您只需将它们与bootstrap一起安装:

npm i -S bootstrap jquery popper.js

并在代码中使用它们,例如:

import "bootstrap";
import $ from "jquery";

$(() => {
    $(".element-with-tooltip").tooltip();
});
q1qsirdb

q1qsirdb5#

import './wrappers/jquery';
import 'bootstrap';

wrappers/jquery.js

import jquery from 'jquery;
window.jQuery = window.$ = jquery;
sxpgvts3

sxpgvts36#

所有这些都是旧的答案,在2023年import 'bootstrap';不适合我。相反,我不得不做:
在package.json中

"dependencies": {
  "jquery": "^3.6.3",
  "bootstrap4": "npm:bootstrap@^4.6.2"
}

在你的JS里

import $ from 'jquery';
import 'bootstrap4/dist/js/bootstrap.bundle';

相关问题