簡體   English   中英

Rails 6 Webpacker:嘗試安裝 jQuery 和 JS 庫

[英]Rails 6 Webpacker: Attempting to install jQuery and JS library

Rails 6、Webpacker 和Flickity

快速演示應用: https : //github.com/ratahtatah/flickedyflack

嘗試 1:純 jQuery

TypeError: $(...).flickity is not a function

應用程序/javascript/packs/application.js

require("@rails/ujs").start()
require("@rails/activestorage").start()
require("channels")

require("jquery")

require("flickity")
import "flickity/dist/flickity.min.css";

$(".main-carousel").flickity({
  contain: true
});

配置/webpack/environment.js

const { environment } = require('@rails/webpacker')

const webpack = require('webpack')
environment.plugins.prepend(
  'Provide', new webpack.ProvidePlugin({
    $: 'jquery/src/jquery',
    jQuery: 'jquery/src/jquery',
    flickity: 'flickity/dist/flickity.pkgd.min'
  })
)

module.exports = environment

嘗試 2:jQuery w/ jQueryBridget (Feifei Xiong)

No errors, but also no initialization

應用程序/javascript/packs/application.js

var $ = require('jquery');
var jQueryBridget = require('jquery-bridget');
var Flickity = require('flickity');

jQueryBridget('flickity', Flickity, $);

$(".main-carousel").flickity({
  contain: true
});

包.json

{
  "name": "flicketyflack",
  "private": true,
  "dependencies": {
    "@rails/actioncable": "^6.0.0",
    "@rails/activestorage": "^6.0.0",
    "@rails/ujs": "^6.0.0",
    "@rails/webpacker": "4.2.2",
    "flickity": "^2.2.1",
    "jquery": "^3.4.1",
    "jquery-bridget": "^2.0.1",
    "turbolinks": "^5.2.0"
  },
  "version": "0.1.0",
  "devDependencies": {
    "webpack-dev-server": "^3.10.3"
  }
}

也許您需要使用 jquery-bridget 將 Flickity 初始化為 jQuery 插件。

yarn add jquery-bridget

然后在 application.js

var $ = require('jquery');
var jQueryBridget = require('jquery-bridget');
var Flickity = require('flickity');

jQueryBridget( 'flickity', Flickity, $ );

# If your are using turbolinks
$(document).on('turbolinks:load', function() {
  $(".main-carousel").flickity({
    contain: true
  });
});

如果您沒有使用 turbolinks,請嘗試以下操作:

$(document).ready(function() {
  $(".main-carousel").flickity({
    contain: true
  });
});

嘗試將此行添加到您的 application.js

import $ from 'jquery';

$(".main-carousel").flickity...之前添加它$(".main-carousel").flickity...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM