欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

webpack的模块打包

程序员文章站 2022-05-30 18:16:29
...

webpack以模块方式导出的配置 

module.exports = {
    entry: 'XX',
    mode: 'development',
    devtool: 'cheap-module',
    output: {
        filename: 'XX',
        path: 'XXX',
        library: 'MyLibrary',
        libraryTarget: 'umd',
    }
}

模块打包主要依赖于output配置的librayTarget,它决定模块导出的类型,类型主要有三大类:

(下面例子中的_entry_return代表模块的导出)

作为变量导出

libraryTarget: 'var'
library: 'MyLibrary'

// 最后生成代码大概就是
var MyLibrary = _entry_return

作为对象导出

libraryTarget: "window"
library: 'MyLibrary'

window['MyLibrary'] = _entry_return_;

作为模块导出

经典的cmd、amd、umd 这3中导出方式,虽然esm的模块方案已成为主流,但是浏览器跑不了。

cmd

libraryTarget: 'commonjs2'
library: 'MyLibrary'        // 会被忽略

module.exports = _entry_return_;

amd

libraryTarget: 'amd',
library: 'MyLibrary',

define('MyLibrary', [], function() {
    return _entry_return;
})

umd

libraryTarget: 'umd'
library: 'MyLibrary'

(function webpackUniversalModuleDefinition(root, factory) {
  if(typeof exports === 'object' && typeof module === 'object')
    module.exports = factory();
  else if(typeof define === 'function' && define.amd)
    define([], factory);
  else if(typeof exports === 'object')
    exports['MyLibrary'] = factory();
  else
    root['MyLibrary'] = factory();
})(typeof self !== 'undefined' ? self : this, function() {
  return _entry_return_;
});