Webpack配置说明
写于 2017-09-02 | 分类于 编程
前端Webpack打包项目,现在是最常见不过的了。网上的脚手架工具也很多,会自动加载webpack和相应的配置,但自己能看懂这些配置也是相当重要的。
配置文件
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
module.exports = {
// 构建目标,默认值是web,还可为node,webworker,electron等
target: 'web',
// 简单单一入口
// entry: './path/to/my/entry/file.js',
// 常用入口场景
entry: {
app: './src/app.js',
vendors: './src/vendors.js'
},
// 编译文件输出,可以传入的值:[id],[name],[hash],[chunkhash]
output: {
filename: 'bundle.js',
path: '/home/project/public/assets/'
},
// 加载器,将资源文件作为参数的来源,然后返回新的资源文件
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader'
},
{
test: /\.js$/,
loader: 'babel-loader',
include: [resolve('src'), resolve('test')],
options: { transpileOnly: false }
}
]
},
// 插件的目的在于解决loader无法实现的事情
// webpack 插件是一个具有 apply 属性的 JavaScript 对象。 apply 属性会被 webpack compiler 调用,并且 compiler 对象可在整个 compilation 生命周期访问
plugins: [
new webpack.optimize.UglifyJsPlugin(),
new HtmlWebpackPlugin({template: './src/index.html'})
]
}
加载器
raw-loader
:加载文件原始内容(utf-8)val-loader
: 将代码作为模块执行,并将 exports 转为 JS 代码url-loader
: 像 file loader 一样工作,但如果文件小于限制,可以返回 data URLfile-loader
: 将文件发送到输出文件夹,并返回(相对)URLjson-loader
: 加载 JSON 文件(默认包含)json5-loader
: 加载和转译 JSON 5 文件cson-loader
: 加载和转译 CSON 文件script-loader
: 在全局上下文中执行一次 JavaScript 文件(如在 script 标签),不需要解析babel-loader
: 加载 ES2015+ 代码,然后使用 Babel 转译为 ES5traceur-loader
: 加载 ES2015+ 代码,然后使用 Traceur 转译为 ES5typescript-loader
: 像 JavaScript 一样加载 TypeScriptcoffee-loader
: 像 JavaScript 一样加载 CoffeeScripthtml-loader
: 导出 HTML 为字符串,需要引用静态资源pug-loader
: 加载 Pug 模板并返回一个函数jade-loader
: 加载 Jade 模板并返回一个函数markdown-loader
: 将 Markdown 转译为 HTMLposthtml-loader
: 使用 PostHTML 加载并转换 HTML 文件handlebars-loader
: 将 Handlebars 转移为 HTMLstyle-loader
: 将模块的导出作为样式添加到 DOM 中css-loader
: 解析 CSS 文件后,使用 import 加载,并且返回 CSS 代码less-loader
: 加载和转译 LESS 文件sass-loader
: 加载和转译 SASS/SCSS 文件stylus-loader
: 加载和转译 Stylus 文件postcss-loader
: 使用 PostCSS 加载和转译 CSS/SSS 文件mocha-loader
: 使用 mocha 测试(浏览器/NodeJS)eslint-loader
: PreLoader,使用 ESLint 清理代码jshint-loader
: PreLoader,使用 JSHint 清理代码jscs-loader
: PreLoader,使用 JSCS 检查代码样式coverjs-loader
: PreLoader,使用 CoverJS 确定测试覆盖率vue-loader
: 加载和转译 Vue 组件polymer-loader
: 使用选择预处理器(preprocessor)处理,并且 require() 类似一等模块(first-class)的 Web 组件angular2-template-loader
: 加载和转译 Angular 组件
插件
BannerPlugin
:为每个chunk文件头部添加bannerCommonsChunkPlugin
:将公用的模块拆出来,建立单独的文件ComponentWebpackPlugin
:使用组件CompressionWebpackPlugin
:预压缩资源DefinePlugin
:允许你创建一个在编译时可以配置的全局常量EnvironmentPlugin
:是在process.env 键(key) 上使用DefinePlugin的简写方式ExtractTextWebpackPlugin
:将所有的 入口chunk (entry chunks) 中的 require(“style.css”) 移动到分开的 css 文件HtmlWebpackPlugin
:简化了HTML文件的创建,以便为您的 webpack bundle 提供服务I18nWebpackPlugin
:添加i18n支持到打包LoaderOptionsPlugin
:帮助人们从 webpack 1 迁移至 webpack 2NormalModuleReplacementPlugin
:将与resourceRegExp匹配的资源替换为newResourceNpmInstallWebpackPlugin
:使用 Webpack 通过自动安装和保存依赖关系来提升开发速度ProvidePlugin
:自动加载模块SourceMapDevToolPlugin
:为资源添加SourceMapsUglifyjsWebpackPlugin
:使用 UglifyJS 去压缩你的JavaScript代码