And*_*nov 4 vue.js bootstrap-4 nuxt.js bootstrap-vue
我正在将 Bootstrap-Vue 库集成到我的基于 Nuxt.js 的项目中。我通读了官方文档以开始使用,但尽管将 bt-vue 作为单个模块导入工作正常,但我希望能够导入单个组件和指令以减少生成的文件大小并使我的设置尽可能高效。文档仅为有关此主题的常规 Vue.js 项目提供了解决方案,但是我如何编写一个插件来使我能够对 Nuxt 执行相同的操作?
我开始创建一个bt-vue.ts插件,如下所示:
import Vue from 'vue'
import { Card } from 'bootstrap-vue/es/components';
Vue.use(Card);
Run Code Online (Sandbox Code Playgroud)
我已将此文件导入 nuxt.config.js 插件部分
plugins: [
...
'@/plugins/bt-vue'
...
]
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译我的项目时,我收到了这个错误:
node_modules\bootstrap-vue\es\components\index.js:1
(function (exports, require, module, __filename, __dirname) { import Alert from './alert';
^^^^^^
SyntaxError: Unexpected token import
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:616:28)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at r (C:\Projects\Wonder\frontend-nuxt\node_modules\vue-server-renderer\build.js:8330:16)
at Object.bootstrap-vue/es/components (server-bundle.js:5771:18)
at __webpack_require__ (webpack/bootstrap:25:0)
at Module../plugins/bt-vue/index.ts (plugins/bt-vue/index.ts:1:0)
at __webpack_require__ (webpack/bootstrap:25:0)
at Module../.nuxt/index.js (.nuxt/index.js:1:0)
at __webpack_require__ (webpack/bootstrap:25:0)
Run Code Online (Sandbox Code Playgroud)
经过大量研究和对 bt-vue lib 的一些修复后,我找到了应对这一挑战的解决方案。此解决方案适用于Nuxt 2,不适用于 Nuxt 1:首先,您需要创建一个插件:
import Vue from 'vue'
import Collapse from 'bootstrap-vue/es/components/collapse'
import Dropdown from 'bootstrap-vue/es/components/dropdown'
Vue.use(Collapse)
Vue.use(Dropdown)Run Code Online (Sandbox Code Playgroud)
我们将只导入我们想要使用的那些组件。更多信息可以在 bt-vue 文档中的组件组和指令作为 Vue 插件中找到
警告:我建议远离这样的导入语法:
import { Modal } from 'bootstrap-vue/es/components';
因为它components无论如何都会导入指令中的所有内容,并使用额外的 JS 代码污染你的最终包,因为它不会被正确地摇晃(webpack 错误),这会破坏这种设置的整个目的,所以使用如上所述的显式导入。
然后在nuxt.config.js中连接:
export default {
build: {
transpile: ['bootstrap-vue']
},
plugins: ['@/plugins/bt-vue']
}Run Code Online (Sandbox Code Playgroud)
如您所见,无需包含模块,因为我们自己编写插件,因此 SSR 没有问题!我们正在使用新的 Nuxt 2transpile属性来构建我们的 es6 bt-vue 模块。不要忘记包含对 css 的引用,因为它是单独出现的。在我的设置中,我只是直接在 index.scss 文件中从常规引导包中导入 SASS 文件,并像往常一样将其包含在 nuxt.config.js 中。
css: [
'@/assets/scss/index.scss'
]Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4831 次 |
| 最近记录: |