Webpack学习笔记
入口:entry
入口起点指示webpack应该使用哪个模块,来作为构建其内部依赖图的开始。进入入口起点后,webpack会找出有哪些模块和库是起点(直接和间接)依赖的。
每个依赖项随即被处理,最后输出到称之为bundles的文件中。
可以通过在webpack配置中配置entry属性,来指定一个入口起点(或多个入口起点)。默认值为./src。
出口:output
output属性告诉webpack在哪里输出它所创建的bundles,以及如何命名这些文件,默认值为./dist。基本上,整个应用程序结构,都会被编译到你指定的输出路径的文件夹中。你可以通过配置中指定一个output字段,来配置这些处理过程。
loader
loader让webpack能够去处理那些非JavaScript文件(webpack自身只理解JavaScript)。loader可以将所有类型的文件转换为webpack能够处理的有效模块,然后你就可以利用webpack的打包能力,对它们进行处理。
本质上,webpack loader将所有类型的文件,转换为应用程序的以来图(和最终的bundle)可以直接引用的模块。
注意,loader能够import导入任何类型的模块(例如.css文件),这是webpack特有的功能,其他打包程序或任务执行器的可能并不支持。我们认为这种语言扩展是很有必要的,因为这可以使开发人员创建出更准确的依赖关系图。
在更高层,在webpack的配置中loader有两个目标:
1. test属性,用于标识出应该被对应的loader进行转换的某个或某些文件。
2. use属性,表示进行转换时,应该使用哪个loader。
const path = require('path');
const config ={
output:{
filename:'my-first-webpack.bundle.js'
},
module:{
rules:[
{test:/\.txt$/,use:'raw-loader'}
]
}
};
以上配置中,对一个单独的module对象定义了rules属性,里面包含两个必须属性:test和use。这告诉webpack编译器(compiler)如下信息:
当你碰到[在require()/import语句中被解析为’.txt’的路径]时,在你对它打包之前,先使用raw-loader转换一下。
重要的是记得,在webpack配置中定义loader时,要定义在module.rules中,而不是rules。
插件:plugins
loader被用于转换某些类型的模块,而插件则可以用于执行 范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。插件接口功能极其强大,可以用来处理各种各样的任务。
想要使用一个插件,你只需要require()它,然后把它添加到plugins数组中。多数插件可以通过选项(option)自定义。你也可以在一个配置文件中因为目的而多次使用同一个插件,这时需要通过使用new操作符来创建它的一个实例。
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 通过 npm 安装
const webpack = require('webpack'); // 用于访问内置插件
const config = {
module: {
rules: [
{ test: /\.txt$/, use: 'raw-loader' }
]
},
plugins: [
new webpack.optimize.UglifyJsPlugin(),
new HtmlWebpackPlugin({template: './src/index.html'})
]
};
module.exports = config;
模式
通过选择development或production之中的一个,来设置mode参数,你可以启用响应模式下的webpack内置的优化。
模块:modules
在模块化编程中,开发者将程序分解成离散功能块,并称之为模块。
每个模块具有比完整程序更小的接触面,使得校验、调试、测试轻而易举。精心编写的模块提供了可靠的抽象和封装界限,使得应用程序中每个模块都具有条理清楚的设计和明确的目的。
什么是webpack模块
对比node.js模块,webpack模块能够以各种方式表达它们的依赖关系,几个例子如下:
- ES2015 import 语句
- CommonJS require()语句
- AMD define 和 require语句
- css/sass/less文件中的@import语句
- 样式(url(…))或HTML文件(<\img src=…>)中的图片链接