【问题标题】:Webpack for component library组件库的 Webpack
【发布时间】:2016-12-15 02:35:10
【问题描述】:

让我们想象一下组件库的以下结构:

/my-library
  - /src
    - /components
      - Button.js (ES6 + React)
      - Anchor.js (ES6 + React)
    - index.js (ES6)

现在我想为生产准备这个库,这就是我的分发文件夹的样子

/my-library
  - /dist
    - /components
      - Button.js (Target: Node, Compiled to ES5 using babel)
      - Anchor.js (Target: Node, Compiled to ES5 using babel)
    - index.js (Target: browser, compiled and minified with webpack)

目前我通过两个任务来实现:

1 - 从src/components“复制”内容并使用 babel 编译的一项任务。

2 - 在 src/index.js 上运行 webpack 的另一个任务。

我想简化这个过程,有人告诉我 webpack 可以用作这个过程的唯一工具。而且这种做法是有道理的,因为src/index.js 无论如何都会遍历所有组件,为什么要这样做两次?

我面临的问题是如何为 Webpack 提供两个不同的目标(节点和浏览器)。我想我知道如何准备我的条目以单独输出所有组件,但是如何在 single 运行中提供缩小版本?

你知道这样的 webpack 配置应该是什么样子吗?

【问题讨论】:

    标签: javascript reactjs webpack libraries


    【解决方案1】:

    你需要 rollup.js 而不是 webpack。

    对于您的组件(Button.js、Anchor.js),请使用rollup-plugin-multi-entry

    示例(没有多个条目。通过下面链接中的文档进行操作)

    rollup -c build/rollup.config.js && uglifyjs dist/index.js -cm --comments -o dist/index.min.js
    

    (它的命令需要添加到 package.json -> 脚本 -> “build”)

    示例 rollup.config.js

    const buble = require('rollup-plugin-buble')
    const flow = require('rollup-plugin-flow-no-whitespace')
    const cjs = require('rollup-plugin-commonjs')
    const node = require('rollup-plugin-node-resolve')
    const replace = require('rollup-plugin-replace')
    
    module.exports = {
      entry: 'src/index.js',
      dest: 'dist/vue-router.js',
      format: 'umd',
      moduleName: 'VueRouter',
      plugins: [replace({
        'process.env.NODE_ENV': '"development"'
      }), flow(), node(), cjs(), buble()]
    }
    

    【讨论】:

    • 感谢分享。但是我的组织有一个开发人员环境,所以我不公开脚本,以便我可以轻松地进行升级。我不熟悉汇总,我的大多数组织都使用 webpack。我假设有一个用于汇总的插件来丑化内容?我认为我不会那么容易地离开 webpack。但我肯定会研究汇总。
    • 我认为,你可以做 2 个 webpack 配置:第一个用于浏览器,第二个用于具有多个条目的节点( entry: [ './components/Button.js', './components/Anchor.js ' ] 或使用 ./components/*.js' )
    • 并将脚本添加到包 json 以使用 2 个 webpack 配置进行构建。
    • 更正他们支持 glob 的条目。但问题是输出目标,它不是“每个条目”。输出的配置只有一个。
    • 两个不同的 webpack 配置我会说这是我今天的两个任务将运行 babel 两次的相同限制。
    猜你喜欢
    • 1970-01-01
    • 2019-11-20
    • 2021-12-28
    • 2020-10-17
    • 2022-10-21
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多