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

Fra*_*ard 65 jquery-ui webpack

任何想法如何处理?我的意思是jquery-ui似乎不是amd而且我不知道如何管理它,任何想法?

Kha*_*edP 72

出于某种原因,jquery-ui没有与webpack玩得很好.我不得不要求jquery-ui-bundle.

npm i -S jquery-ui-bundle

然后在jquery之后需要它,例如

require('jquery');
require('jquery-ui-bundle');
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.救了我这么多头痛.似乎jquery-ui包不包含ready build jquery-ui.js文件:/ (11认同)
  • 你能否用一个带有 jquery 和 `jquery-ui` 的 `webpack.config.js` 的工作示例来扩展你的答案吗? (2认同)

Aru*_*ath 66

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");
Run Code Online (Sandbox Code Playgroud)

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

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

  • 对于在 JQuery-UI 上找到 NPM 安装说明的文档是多么困难,我感到非常痛苦。我迫不及待地想有一天我可以从我当前的项目中谋杀这个图书馆! (3认同)
  • 这个答案对我帮助最大,但我的答案仍然无法工作,直到我动态加载它。在编译时不需要它,因为可拖动小部件一直在寻找 jQuery 对象。(不是 global.jQuery 或 window.jQuery)。所以我在页面加载后需要它 (2认同)
  • 不,那不是问题.无论如何,从那以后,我已经能够让它发挥作用.问题究竟是什么,这仍然是个谜.但是,我确实遇到了在jsdom测试环境中工作的问题.同样的错误再次出现.`$ .widget("ui.draggable",$ .ui.mouse,{TypeError:无法读取未定义的属性'mouse'但是,我能够通过要求所有依赖项来修复它:`require('jquery -ui/ui/version'); require('jquery-ui/ui/plugin'); require('jquery-ui/ui/widget'); require('jquery-ui/ui/widgets/mouse')` ; (2认同)
  • @ArunaHerath这非常有帮助,谢谢! (2认同)

wen*_*mva 38

你很幸运我昨天这么做,这很容易.

npm install --save jquery jquery-ui
Run Code Online (Sandbox Code Playgroud)

确保你有jquery别名来解决webpack.config.js中的插件

...
plugins: [
    new webpack.ProvidePlugin({
      "$":"jquery",
      "jQuery":"jquery",
      "window.jQuery":"jquery"
    }),
...
Run Code Online (Sandbox Code Playgroud)

然后在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"),
Run Code Online (Sandbox Code Playgroud)

确保首先在app启动文件中加载jquery.

var $ = require("jquery"),
        require("jquery-ui");
Run Code Online (Sandbox Code Playgroud)

如果需要使用主题配置css-loader和文件加载器.别忘了npm安装那些装载机.

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

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

require("modules/jquery-ui/themes/black-tie/jquery-ui.css");
require("modules/jquery-ui/themes/black-tie/jquery-ui.theme.css");
Run Code Online (Sandbox Code Playgroud)

  • 你在用npm吗?jquery-ui.js没有附带它 (9认同)
  • 应用程序启动文件是什么?如果在那里初始化 $ ,如何将其设置为所有文件的全局变量? (2认同)

chr*_*Brd 13

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

我获得整个软件包工作的最快方法是首先下载可分发版本:

npm install jquery-ui-dist --save
Run Code Online (Sandbox Code Playgroud)

我需要添加别名jquery-ui-dist以避免"无法找到模块"错误(使用只是require('jquery-ui-dist')不起作用,因为.js文件名不同),通过将其添加到webpack.config.js:

resolve: {
    alias: {
        'jquery-ui': 'jquery-ui-dist/jquery-ui.js'
    }
},
Run Code Online (Sandbox Code Playgroud)

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

var jQuery = require('jquery');
require('jquery-ui'); 
Run Code Online (Sandbox Code Playgroud)

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

 plugins: [
    new webpack.ProvidePlugin({
        'jQuery': 'jquery',
        '$': 'jquery',
        'global.jQuery': 'jquery'
    })
],
Run Code Online (Sandbox Code Playgroud)


Sta*_*uro 12

的WebPack-jQuery的UI

webpack-jquery-ui - 使用这个插件,例如,如果你使用Rails 5,运行

 yarn add webpack-jquery-ui
Run Code Online (Sandbox Code Playgroud)

当jQuery UI插件启动时,它会检查是否提供了jquery,所以

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

plugins: [
  new webpack.ProvidePlugin({
      $: "jquery",
      jQuery: "jquery",
      "window.jQuery": "jquery'",
      "window.$": "jquery"
  })
]
Run Code Online (Sandbox Code Playgroud)

将这些行添加到您的应用代码中.

require('webpack-jquery-ui');
require('webpack-jquery-ui/css');
Run Code Online (Sandbox Code Playgroud)

修复ActionController::InvalidAuthenticityTokenjquery.ajax

你必须通过一个authenticity_token与你的所有参数PUT,POSTDELETE请求.

要做到这一点,你通常可以从标题中获取它 $('[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) {
   ...
  }
});
Run Code Online (Sandbox Code Playgroud)

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

而不是使用:

plugins: [
new webpack.ProvidePlugin({...
Run Code Online (Sandbox Code Playgroud)

您应该将'jquery':'jquery/src/jquery'添加到webpack配置文件中的别名:

module.exports = {
  resolve: {
    alias: {
        'jquery': 'jquery/src/jquery'
    }
  }
Run Code Online (Sandbox Code Playgroud)

它将提供模块名称'jquery'.jQuery UI在init上检查此名称.

然后在你的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.
Run Code Online (Sandbox Code Playgroud)