• webpack除了可以打包应用,也可以用来打包js库
  • 实现一个大整数加法库的打包

    • 需要打包压缩版和非压缩版
    • 支持AMD/CJS/ESM 模块引入

      库的目录结构和打包要求

      打包输出的库名称

  • 未压缩版 large-number.js

  • 压缩版 large-number.min.js

    |-dist |-large-number.js |-large-number.min.js |-src |-index.js
    |-index.js |-webpack.config.js |-package.json

支持的引入方式

  • 支持ES module
  • 支持 CJS
  • 支持 AMD

image.png

  • 可以直接通过<script>引入

    如何将库暴露出去

  • webpack.config.jsoutput中在参数

    • library:指定库的全局变量
    • libraryTarget:支持库引入在方式

      webpack.config.js与package.json

  • 安装包:npm i terser-webpack-plugin -D

  1. // webpack.config.js
  2. const TerserPlugin = require('terser-webpack-plugin)
  3. module.exports = {
  4. mode: 'none',
  5. entry: {
  6. 'large-number': './src/index.js',
  7. 'large-number.min': './src/index.js'
  8. },
  9. output: {
  10. filename: '[name].js',
  11. library: 'largeNumber',
  12. libraryTarget: 'umd',
  13. libraryExport: 'default'
  14. },
  15. optimization: {
  16. minimize: true,
  17. minimizer: [
  18. new TerserPlugin({ include: /\.min\.js$/ })
  19. ]
  20. }
  21. }
  1. // package.json
  2. {
  3. "main":"index.js",
  4. "description": "大整数加法", // 这个描述是发布到npm上的时候的描述
  5. "script": {
  6. "prepublish": "webpack" // 发布到npm之前,进行打包
  7. }
  8. }
  1. // 根目录下的index.js
  2. if(process.env.NODE_ENV === 'production') {
  3. module.exports = require('./dist/largeNumber.min.js')
  4. } else {
  5. module.exports = require('./dist/largeNumber.js')
  6. }
  • 发布到npm上
    • 先要有一个npm的账号
    • npm publish