使用 npm 初始化项目,然后安装 webpack webpack-cli lodash

npm init -y
npm install --save-dev webpack webpack-cli

src/index.js

export const add = (x, y) => x + y;
export const subtract = (x, y) => x - y;

webpack.config.js

const path = require('path');
module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'myMath.js',

在上面的例子中,我们将通知 webpack 将 src/index.js 打包到 dist/myMath.js 中。

导出 library

到目前为止,一切都应该与打包应用程序一样,这里是不同的部分 - 我们需要通过 output.library 配置项暴露从入口导出的内容。

webpack.config.js

  const path = require('path');
  module.exports = {
    mode: 'production',
    entry: './src/index.js',
    output: {
      path: path.resolve(__dirname, 'dist'),
      filename: 'myMath.js',
+     library: "myMath",

我们导出了 myMath以便用户可以通过脚本标签使用它:

test/index.html

<script src="../dist/myMath.js"></script>
<script>
  myMath.add(1, 2);
</script>

然而它只能通过被脚本标签引用而发挥作用,它不能运行在 CommonJSAMDNode.jsES module 等环境中。

输出 ES 模块

该特性仍然是实验性的,并且没有完全支持,所以请确保事先启用 experiments.outputModule。除此之外,你可以在 这里 追踪开发进度。

const path = require('path');
module.exports = {
  mode: 'production',
  entry: './src/index.js',
  experiments: {
    outputModule: true,
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'myMath.js',
    library: {
      // name: 'myMath', // 这里不要执行 name
      type: 'module',

执行 npx webpack

test/index.html

<script type="module">
  import { add } from '../dist/myMath.js'
  console.log(add(1, 2));
</script>

可以看到能正常输出

输出 umd

一个库作者,我们希望它能够以不同的环境,方式,用户应该能够通过以下使用打包后的库: