【问题标题】:MD Bootstrap Incompatible with Rails 6?MD Bootstrap 与 Rails 6 不兼容?
【发布时间】: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


【解决方案1】:

我让 mdbootstrap 在 rails 6 上工作,请按照以下步骤操作:

将 jquery mdb-ui-kit 和 mdbootstrap 添加到 rails:

yarn add jquery mdb-ui-kit mdbootstrap

关于 environment.js

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

environment.plugins.append('Provide', new webpack.ProvidePlugin({
 $: 'jquery',
 jQuery: 'jquery'
}))
module.exports = environment

添加 javascripts/packs/application.js

require("jquery")

import * as mdb from 'mdb-ui-kit';

关于资产/样式表/application.scss

@import 'mdb-ui-kit/css/mdb.min.css';
@import 'mdbootstrap/css/mdb.min.css';

【讨论】:

  • 谢谢,豪尔赫。我试过这个,但无法让它工作。模块构建时出现 JS 控制台错误:dataTables.bootstrap4.min.css:7 Uncaught Error: Module build failed (from ./node_modules/postcss-loader/src/index.js): ParserError: Syntax Error at line: 1, column 25 at :3000/shared/work/tepper-bennett/node_modules/mdb-ui-kit/css/mdb.min.css:18 此外,RubyMine 将 import * as mdb from 'mdb-ui-kit'; 标记为未使用。
猜你喜欢
  • 2017-11-29
  • 1970-01-01
  • 2011-12-18
  • 2020-05-30
  • 1970-01-01
  • 2020-03-19
  • 2019-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多