jquery-ui和webpack,如何将其管理到模块中?


Answers:


45

幸运的是,我昨天才这样做,这很容易。

npm install --save jquery jquery-ui

确保您拥有要使用webpack.config.js中的插件解析的jquery别名

...
plugins: [
    new webpack.ProvidePlugin({
      "$":"jquery",
      "jQuery":"jquery",
      "window.jQuery":"jquery"
    }),
...

然后在webpack.config.js中包含两个别名

  1. node_modules文件夹
  2. jquery-ui文件夹

````

resolve : {
    alias: {
      // bind version of jquery-ui
      "jquery-ui": "jquery-ui/jquery-ui.js",      
      // bind to modules;
      modules: path.join(__dirname, "node_modules"),

确保首先在应用启动文件中加载jquery。

var $ = require("jquery"),
        require("jquery-ui");

如果您需要使用主题,请配置css-loader和file-loader。不要忘记npm安装那些装载程序。

module: {
    loaders: [
      { test: /\.css$/, loader: "style!css" },
      { test: /\.(jpe?g|png|gif)$/i, loader:"file" },

并在您的应用启动文件中使用。

require("modules/jquery-ui/themes/black-tie/jquery-ui.css");
require("modules/jquery-ui/themes/black-tie/jquery-ui.theme.css");

什么是应用启动文件?如果在此处初始化$,如何使它在所有文件中全局化?
e18r

10
您正在使用npm吗?jquery-ui.js不
随附-e18r

1
启动文件是您执行节点app.js时的文件,即应用程序的入口文件。当使用provide插件时,这就是使它对于由webpack处理的任何文件都是全局的。对于所有其他文件,您只需要它。是的,我正在使用npm,在此解决方案生效之前,您需要jquery和jquery-ui以及所有其他组件(例如webpack和您使用的加载程序)。
wendellmva '16

下面的答案仅适用于使用捆绑软件的情况,不适用于您npm安装jQuery的情况,因为那样的话您不会得到捆绑软件,而是打包的软件!
wendellmva '18

@WendellMuntslag我只需要将新的webpack.ProvidePlugin({“ $”:“ jquery”,“ jQuery”:“ jquery”,“ window.jQuery”:“ jquery”})添加到我的webpack.config.js中。确实需要别名。有效。谢谢。
威尔

82

由于某些原因jquery-ui,webpack不能很好地工作。我不得不要求jquery-ui-bundle

npm i -S jquery-ui-bundle

然后在jquery之后要求它

require('jquery');
require('jquery-ui-bundle');

11
谢谢。救了我这么多头疼。似乎jquery-ui软件包不包含现成的jquery-ui.js文件:
Sammi

这也适用于我的电子应用程序部署。谢谢!
UltrasoundJelly

2
您能否webpack.config.js用jquery和的工作示例扩展答案jquery-ui
Thomas Szteliga

jquery-ui现在可以与webpack一起使用。看我的答案。
Aruna Herath

我花了几个小时试图弄清楚为什么jquery-ui在将vanilla js迁移到Create React App的过程中会引发错误。
Marius B

80

jquery-ui-dist并且jquery-ui-bundle似乎不由jquery-ui团队维护。在jquery-ui jquery-uiv1.12之后,可以将npm中的官方包与webpack一起使用。

通过更新package.json和将jquery-ui更新到1.12 npm install

然后,您可以require像这样每个小部件。

require("jquery-ui/ui/widgets/autocomplete");
require("jquery-ui/ui/widgets/draggable");

如果您使用过 require("jquery-ui")过,则需要用每个小部件的单独导入替换它。我认为新方法更好,因为它将只捆绑我们需要使用的小部件的代码。

请参阅有关使用1.12官方npm软件包的文档


1
这个答案对我的帮助最大,但是直到我动态加载它后,我的方法才起作用。在编译期间不需要它,因为可拖动小部件一直在寻找jQuery对象。(不是global.jQuery或window.jQuery)。所以页面加载后我需要它
Lioness

@NnennaUde会require('jquery');require("jquery-ui/ui/widgets/draggable");工作前添加吗?
Aruna Herath

2
不,那不是问题。无论如何,从那时起,我一直能够使其工作。问题到底是什么仍然是个谜。但是,在将其用于jsdom测试环境中时确实遇到了问题。同样的错误再次出现。$.widget( "ui.draggable", $.ui.mouse, { TypeError: Cannot read property 'mouse' of undefined 不过,我可以通过要求其所有的依赖关系进行如下修正:require('jquery-ui/ui/version'); require('jquery-ui/ui/plugin'); require('jquery-ui/ui/widget'); require('jquery-ui/ui/widgets/mouse');
母狮

1
对于在JQuery-UI上查找有关NPM安装说明的文档有多么困难,这真是令人痛苦。我等不及要从当前项目中谋杀这个图书馆的那天开始!
ecbrodie

如何包含自动完成的CSS文件?
维杰·梅埃纳

18

webpack-jquery-ui

webpack-jquery-ui- 使用此插件,例如,如果您使用Rails 5,请运行

 yarn add webpack-jquery-ui

jQuery UI插件启动时,它将检查是否提供了jquery,因此

将此代码添加到webpacker配置文件(shared.js-如果与Rails 5一起使用)

plugins: [
  new webpack.ProvidePlugin({
      $: "jquery",
      jQuery: "jquery",
      "window.jQuery": "jquery'",
      "window.$": "jquery"
  })
]

将这些行添加到您的应用程序代码中。

require('webpack-jquery-ui');
require('webpack-jquery-ui/css');

修复ActionController::InvalidAuthenticityTokenjquery.ajax

您必须authenticity_token与所有参数一起传递参数PUTPOST并且DELETE请求。

为此,通常可以使用 $('[name="csrf-token"]')[0].content

因此,您的请求将类似于:

var that = this;
$.ajax({
  url: navigator_item.url,
  data: { authenticity_token: $('[name="csrf-token"]')[0].content},
  method: 'DELETE',
  success: function(res) {
   ...
  }
});

我以另一种方式将jQuery包含到我的应用程序中

而不是使用:

plugins: [
new webpack.ProvidePlugin({...

您应该在Webpack配置文件的别名中添​​加'jquery':'jquery / src / jquery':

module.exports = {
  resolve: {
    alias: {
        'jquery': 'jquery/src/jquery'
    }
  }

它将提供模块名称“ jquery”。jQuery UI在初始化时检查此名称。

然后在您的app.js文件中编写:

import $ from 'jquery'

import 'webpack-jquery-ui/css'
import 'webpack-jquery-ui/sortable' // if you need only sortable widget.

window.jQuery = $;
window.$ = $; // lazy fix if you want to use jQuery in your inline scripts.

谢谢,史丹利!您添加别名的第二个解决方案确实对我
有用

14

接受的答案对我不起作用,因为NPM上的jQuery-ui包不是预先构建的,因此不包含 jquery-ui.js;该软件包将需要在使用前构建,或者单独包含/使用的所有小部件。

使整个程序包正常运行的最快方法是首先下载可分发的版本:

npm install jquery-ui-dist --save

我需要添加一个别名jquery-ui-dist来避免出现“找不到模块”错误(使用require('jquery-ui-dist')将不起作用,因为.js文件名不同),方法是将其添加到webpack.config.js

resolve: {
    alias: {
        'jquery-ui': 'jquery-ui-dist/jquery-ui.js'
    }
},

最后,您可以在加载模块的.js文件中使用它:

var jQuery = require('jquery');
require('jquery-ui'); 

另外,您可以require通过在webpack.config.js中使用ProvidePlugin来避免在加载模块时必须使用脚本,并且不必将jQuery声明为变量:

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

我不能使它工作。使用webpack.ProvidePlugin可以在窗口中正确显示“ jQuery”和“ $”变量,但没有“ jquery-ui”插件。如果我console.log($。ui)它给出未定义。@chrBrd有什么想法吗?您使用了哪个版本的webpack?
西蒙妮·马佐尼

它将是1.x版???-我撰写答案时的最新信息。如果您使用它require而不是ProvidePlugin可以正常工作吗?
chrBrd

1
您可以使用require('jquery-ui-dist/jquery-ui.js');代替别名。
拉斐尔

3

对我有用的步骤(在Rails 5.1.6项目中)与上述任何步骤都不相同:

安装jquery和jquery-ui:yarn add jqueryyarn add jquery-ui

将以下内容添加到webpack配置中(即/config/webpack/environment.js),以全局设置$以及jquery和jQuery:

environment.plugins.prepend(
  'Provide',
  new webpack.ProvidePlugin({
    $: 'jquery',
    jQuery: 'jquery',
    jquery: 'jquery'
  })
)

需要取其个人的jquery-ui包(S)你想,在你包的顶部(例如,在顶部/javascript/packs/application.js

require("jquery-ui/ui/widgets/sortable")

然后,您可以$('.selector').sortable()在包中的任何地方打电话。


0

使用以下命令在您的node_modules中添加jquery;

npm install --save jquery jquery-ui

并在您的webpack.config.js中添加外部组件,例如;

...

  externals: {
// require("jquery") is external and available
//  on the global var jQuery
"jquery": "jQuery",
"jquery-ui": "jquery-ui/jquery-ui.js", 
}

它对我有用

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.