gpt4 book ai didi

javascript - 如何正确地将jquery插件添加到webpack中的jquery对象中?

转载 作者:行者123 更新时间:2023-12-02 23:23:28 25 4
gpt4 key购买 nike

TL;DR使用插件扩展 jQuery 对象、全局公开它以及在 webpack 中使用带有 ES6 模块的外部 AMD 库的正确方法是什么?webpack 是否是完成该任务的正确工具,或者 SystemJs 是否更适合将遗留应用程序重构为 ES6 模块的情况?

我正在尝试使用 webpack 和 ES6 模块。我有一个主要是 jquery 的遗留应用程序,目前正在转换。我面临以下挑战:

  1. 寻找 webpack/babel-loader 工作流程中的最佳实践
  2. 弄清楚使用哪个加载器/插件来实现哪个目的
  3. 让 AMD 资源(例如 jquery 和 jquery 插件)与其余模块良好配合。
  4. 公开 jquery 全局变量,并使用所有插件和 jquery-ui 进行扩展

我依赖以下资源:这个很好的答案解释了很多,尽管它没有提到我主要依赖的导出加载器:https://stackoverflow.com/a/28989476/2613786

http://webpack.github.io/docs/shimming-modules.html - 文档列出了许多可能性,但我缺乏经验来决定哪一种是正确的。似乎更喜欢使用 ProvidePlugin 而不是暴露加载器。遗憾的是我没有让它与扩展的 jQuery 对象一起工作。它对于使用 <script> 中调用的模块函数也不起作用。标签。

我仍然在努力寻找编程解决方案并决定哪个 webpack 插件最适合这项工作。非常感谢经验丰富的 webpack 用户提供的一些建议或示例。

在我的webpack.config.js我有以下加载器来公开 jquery 并使用 babel 进行转译:

module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {modules: 'common'}
},
{
test: /jquery\.js$/,
exclude: /node_modules/,
loader: 'expose?jQuery',
},
{
test: /jquery\.js$/,
exclude: /node_modules/,
loader: 'expose?$',
},
{
test: /[\/\\]vendor[\/\\]jquery.sparkline\.js$/,
loader: "imports?define=>false"
}
]
},
amd: { jQuery: true },
// plugins: [
// new webpack.ProvidePlugin({
// $: 'jquery',
// jQuery: 'jquery',
// 'window.jQuery': 'jquery',
// 'root.jQuery': 'jquery'
// })
// ], ...

在我的entry.js 文件中,我通过以下方式包含jquery:

import 'expose?jQuery!expose?$!./vendor/jquery';
import './jquery/jquery-ui';
import './vendor/jquery.sparkline';

我必须注释掉 ProvidePlugin,当我使用它时,jQuery 不再使用自定义插件进行扩展,知道为什么会出现这种情况吗?这与使用 ES6 模块语法的插件有关吗?

我必须添加loader: "imports?define=>false"对于 jquery.sparkline.js让它被认可。这真的有必要吗,或者有更好的方法吗?

关于 jquery-ui,我必须找到一个不使用 AMD 定义的旧版本来将其添加到 jquery 对象。正确的做法是什么?

非常感谢任何帮助和建议,切换到 SystemJs 和 Jspm 的原因也可能是一个解决方案。

最佳答案

我对此遇到了问题,似乎是因为某些插件假设 $ 而其他插件假设 jQuery,但以下内容最终对我有用,即使它相当丑陋:

编辑,请注意,我正在测试名为 jquery.xyz.js 的插件,您必须适当调整正则表达式。另外,我不确定 jQuery 的两个不同的公开加载器是否会导致问题,但到目前为止这是有效的。

// webpack.config.js
...
"module": {
"loaders": [
{
test: require.resolve("jquery"),
loader: "expose?$!expose?jQuery"
},
{
test: /jquery\..*\.js/,
loader: "imports?$=jquery,jQuery=jquery,this=>window"
}
...

关于javascript - 如何正确地将jquery插件添加到webpack中的jquery对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29237124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com