如何使用 Rollup 构建自定义引导程序包

Mou*_*udi 6 javascript rollup bootstrap-5

根据 Bootstrap 5 官方文档,我们可以从bootstrap/js/dist(Webpack, rollup, ...) 中导入预编译的 js 文件并构建自定义包。

https://getbootstrap.com/docs/5.0/getting-started/javascript/#individual-or-compiled

在 docs 的优化部分,他们给出了如何导入 js 文件的示例。 https://getbootstrap.com/docs/5.0/customize/optimize/#lean-javascript

问题: 我创建了一个名为bootstrap.js

import 'bootstrap/js/dist/tooltip';
Run Code Online (Sandbox Code Playgroud)

我只想使用Tooltip插件。我使用以下配置进行汇总

  const plugins = [
    babel({
      exclude: 'node_modules/**',
      // Include the helpers in each file, at most one copy of each
      babelHelpers: 'bundled',
      presets: [
        [
          '@babel/preset-env',
          {
            loose: true,
            bugfixes: true,
            modules: false
          }
        ]
      ]
    }),
    nodeResolve()
  ]

  const bundle = await rollup.rollup({
    input: './js/vendors/bootstrap.js',
    plugins,
  })

  await bundle.write({
    format: 'umd',
    file: './file.js'
  })
Run Code Online (Sandbox Code Playgroud)

生成file.js并使用 HTML 页面后,控制台中会显示错误file.js:1727 Uncaught ReferenceError: process is not defined

此外,我无法使用引导程序语法来初始化Tooltip插件 new bootstrap.Tooltip会给出 undefined 错误bootstrap

我可以通过从js/src文件夹中导入这些文件并在它们使用时导出它们来实现我想要的,js/src/index.umd.js但遵循有关如何导入其插件的引导程序官方文档似乎无法正常工作。

小智 2

不知道如何剖析你的代码 - 你错过了对 Popper 的全部依赖。

但这就是我会做的(提示:我获取了 BS5 源代码并删除了所有不需要的东西。)

假设您在 Boorstrap 5 的分支上进行编译:

文件: build\rollup.config.mk.js

'use strict'

const path = require('path')
const { babel } = require('@rollup/plugin-babel')
const { nodeResolve } = require('@rollup/plugin-node-resolve')
const replace = require('@rollup/plugin-replace')
const banner = require('./banner.js')

let fileDest = `bootstrap-mk`
const external = ['@popperjs/core']
const plugins = [
  babel({
    // Only transpile our source code
    exclude: 'node_modules/**',
    // Include the helpers in the bundle, at most one copy of each
    babelHelpers: 'bundled'
  })
]
const globals = {
  '@popperjs/core': 'Popper'
}

const rollupConfig = {
  input: path.resolve(__dirname, `../js/index.mk.umd.js`),
  output: {
    banner,
    file: path.resolve(__dirname, `../dist/js/${fileDest}.js`),
    format: 'umd',
    globals
  },
  external,
  plugins
}

rollupConfig.output.name = 'bootstrap'

module.exports = rollupConfig
Run Code Online (Sandbox Code Playgroud)

... 并且 ...

文件: js\index.mk.umd.js

import Tooltip from './src/tooltip'

export default {
  Tooltip
}
Run Code Online (Sandbox Code Playgroud)

rollup --config build/rollup.config.mk.js --sourcemap然后从命令行调用: ,或者在packacge.json\“ scripts”部分添加类似的内容:

  "js-compile-mk": "rollup --config build/rollup.config.mk.js --sourcemap",
Run Code Online (Sandbox Code Playgroud)

...并npm run js-compile-mk从命令行调用。

输出将是一个名为:( dist\js\bootstrap-mk.js 和一个地图文件)的文件


如果您不想使用分支,而是使用node_modules子文件夹,则可以更改文件中的路径build\rollup.config.mk.js