【发布时间】:2018-03-21 14:48:30
【问题描述】:
我正在将使用 CoffeeScript 的 Rails 5.1.5 项目从使用 sprocket 迁移到使用 webpacker。该项目还使用select2.js。使用链轮,我做了以下事情:
- 安装
jquery-rails(jQuery 是select2的依赖项)。 - 将
select2.js代码放入vendor/assets/javscripts。 -
在
application.js.coffee,添加:#= require select2
之后,我可以在我的application.js.coffee 文件中使用 select2:
$(document).on 'turbolinks:load' ->
$('select').select2
到目前为止,我已经描述了包含/使用带有链轮的 javascript 库的非常标准的方法。
但是,使用 webpacker 我无法使 select2 工作,我不知道为什么。我有两个假设:
- 我没有正确导入/要求它;
- 在加载过程的某个时刻找不到 jQuery;
所以对于 jQuery,我做了以下操作:
yarn add jquery-
包含在我的
environment.js:const webpack = require('webpack'); environment.plugins.append('Provide', new webpack.ProvidePlugin({ $: 'jquery', jQuery: 'jquery' }));
我已经删除了 jquery-rails gem 和 #= require 'jquery' 并测试了 jquery 的工作原理,所以我想我已经正确地包含了它。但是,我尝试了几种导入 select2 的方法(使用 es6 导入),但都没有奏效。我试过了:
import select2 from 'select2';
import select2 from 'select2/dist/js/select2'
import select2 from 'select2/dist/js/select2.js'
import 'select2/dist/js/select2.js'
我什至尝试通过在app/javascript/pack/application.js.coffee 中写入来从旧的vendor location 导入它:
import '../../../vendor/assets/javascripts/select2'
我可以确认文件内容已导入,因为我在 node_modules/select2/dist/js/select.js 下的 select2 文件中放置了一个 console.log,它确实被打印了。但是,当我在浏览器的开发工具控制台中执行$('select').select2() 时,我也会收到错误TypeError: $(...).select2 is not a function。
我错过了什么或做错了什么?
附:我可以提供更多信息,但我不想让我的问题变得更加臃肿。 附言凭借我的 JS 知识,我查看了 source code,但无法识别它们究竟在导出什么以及我应该如何导入它。
【问题讨论】:
标签: ruby-on-rails webpack jquery-select2 es6-modules