jQuery UI 具有全局可用的便捷函数,例如 Sine、Circ、Elastic、Back、Bounce 等。但是当使用 webpack 包含 jQuery UI 时,全局函数变得不可用。以下代码失败:
function setup_sidebar_menu()
{
var $ = jQuery,
$items_with_submenu = public_vars.$sidebarMenu.find('li:has(ul)'),
submenu_options = {
submenu_open_delay: 0.25,
submenu_open_easing: Sine.easeInOut,
submenu_opened_class: 'opened'
},
root_level_class = 'root-level',
is_multiopen = public_vars.$mainMenu.hasClass('multiple-expanded');
因为正弦是未定义的。使用 webpack 时,有什么方法可以让这些 jQuery UI 函数在全球范围内可用?例如,$ 全局可用,jQuery 也全局可用。$.ui 也可用。
配置如下:
环境.js
const { environment } = require('@rails/webpacker')
const webpack = require('webpack')
environment.plugins.prepend('Provide', new webpack.ProvidePlugin({
$: 'jquery',
JQuery: 'jquery',
jQuery: 'jquery',
jquery: 'jquery',
'window.Tether': "tether",
Popper: ['popper.js', 'default'], // for Bootstrap 4
}))
module.exports = environment
应用程序.js
var jQuery = require("jquery")
// import jQuery from "jquery";
global.$ = global.jQuery = jQuery;
window.$ = window.jQuery = jQuery;
import 'webpack-jquery-ui'
正如我所说,jQueryUI 库已正确加载并通过 $.ui 可用,问题涉及全局函数。
更新:
似乎正确的解决方案是在packs目录中从头开始创建新的 js 脚本文件并重新编写有效的 ES6 / ES7。这种方法出现的问题是无法导入 jquery-ui 全局函数 Sine、Circ、Elastic、Back、Bounce:
全部失败,Sine 和任何其他类似的全局函数始终未定义:
import {Sine} from 'jquery-ui/ui/effect'
// or
import {Sine} from 'jquery-ui'
// or
import {Sine} from 'webpack-jquery-ui'
console.log(Sine)
这里有什么问题?
