【发布时间】:2020-11-28 09:21:32
【问题描述】:
我有一个 Rails 6 应用程序。生成时,它将这些行(和其他行)放在 application.js 中:
require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
当我安装 Bootstrap 4 时,我添加了:
import "bootstrap"
import "../stylesheets/application"
document.addEventListener("turbolinks:load", () => {
$('[data-toggle="tooltip"]').tooltip()
$('[data-toggle="popover"]').popover()
})
现在我想添加 MD Bootstrap。我做了一个yarn add mdbootstrap 并将这一行添加到application.js:
require('mdbootstrap')
我在 JS 控制台中收到此错误:
Uncaught TypeError: Cannot assign to read only property 'exports' of object '#<Object>'
at Object.<anonymous> (mdb.min.js:3414)
at Object../node_modules/mdbootstrap/js/mdb.min.js (mdb.min.js:3417)
at n (mdb.min.js:38)
at Module../node_modules/mdbootstrap/js/mdb.min.js (mdb.min.js:3297)
at n (mdb.min.js:38)
at Object../node_modules/mdbootstrap/js/mdb.min.js (mdb.min.js:3292)
at n (mdb.min.js:38)
at mdb.min.js:74
at Object.<anonymous> (mdb.min.js:75)
at Object../node_modules/mdbootstrap/js/mdb.min.js (mdb.min.js:14068)
(anonymous) @ mdb.min.js:3414
./node_modules/mdbootstrap/js/mdb.min.js @ mdb.min.js:3417
n @ mdb.min.js:38
./node_modules/mdbootstrap/js/mdb.min.js @ mdb.min.js:3297
n @ mdb.min.js:38
./node_modules/mdbootstrap/js/mdb.min.js @ mdb.min.js:3292
n @ mdb.min.js:38
(anonymous) @ mdb.min.js:74
(anonymous) @ mdb.min.js:75
./node_modules/mdbootstrap/js/mdb.min.js @ mdb.min.js:14068
__webpack_require__ @ bootstrap:19
(anonymous) @ application.js:31
./app/javascript/packs/application.js @ application.js:177
__webpack_require__ @ bootstrap:19
(anonymous) @ bootstrap:83
(anonymous) @ bootstrap:83
为什么要这样做?我该如何解决?
我读到 import 和 requires 不应该混用。这是否意味着自动生成的require 调用应该更改为导入?我能够将需求转换为导入:
import Ujs from '@rails/ujs'
import TurboLinks from 'turbolinks'
import * as ActiveStorage from '@rails/activestorage'
import 'channels'
import 'packs/reports'
import 'datatables.net-bs4'
import 'datatables.net-bs4/css/dataTables.bootstrap4.min.css'
【问题讨论】:
-
另外,
mdbootstrap是否将bootstrap安装为依赖项,因此我是否应该自己不明确安装bootstrap? -
我现在看到这是 webpack 和 ES6 的问题,而不是 Rails 特有的问题:github.com/mdbootstrap/bootstrap-material-design/issues/…。此问题已于 2019 年 12 月报告,但仍未解决。 mdbootstrap.com/support/jquery/… 有一个解决方法,但它是特定于 Laravel 的,我不确定是否可以将其转换为 Rails 6。
标签: javascript import require ruby-on-rails-6 mdbootstrap