webpack 是一个现代的 JavaScript 应用程序的模块打包器 ( Module Bundler ) 。
入口 ( Entry )
webpack 将创建所有应用程序的依赖关系图表 ( dependency graph ) 。图表的起点被称之为入口起点 ( entry point ) 。入口起点告诉 webpack 从哪里开始,并遵循着依赖关系图表知道要打包什么。可以将您应用程序的入口起点认为是根上下文 ( contextual root ) 或 app 第一个启动文件。
const path = require('path')
module.exports = {
entry: path.join(__dirname, './src/main.js')
}
出口 ( Output )
将所有的资源 ( assets ) 归拢在一起后,我们还需要告诉 webpack 在哪里打包我们的应用程序。webpack 的 output 属性描述了如何处理归拢在一起的代码 ( bundled code ) 。
webpack.config.js
const path = require('path')
module.exports = {
output: {
path: path.join(__dirname, './dist'),
filename: 'bundle.js'
}
}
我们通过 output.filename 和 output.path 属性来描述 webpack bundle 的名称,以及我们想要生成 ( emit ) 在哪里。
加载器 ( Loader )
webpack 的目标是,让 webpack 聚焦于项目中的所有资源 ( asset ) ,而浏览器不需要关注考虑这些( 这并不意味着资源 ( asset ) 都必须打包在一起 )。webpack 把每个文件
(.css /.html /.scss /.jpg等) 都作为模块处理。而且 webpack 只理解 JavaScript 。
webpack loader 会将这些文件转换为模块,而转换后的文件会被添加到依赖图表中。
在更高层面,webpack 的配置有两个目标。
1、识别出应该被对应的 loader 进行转换的文件
2、由于进行过文件转换,所以能够将被转换的文件添加到依赖图表(通过 use 属性)中
webpack.config.js
module.exports = {
module: {
rules: [
{ test: /\.js$/, use: 'babel-loader' }
]
}
}
以上配置中,我们对一个单独的 module 对象定义了 rules 属性,里面包含两个必须属性:test 和 use 。这可以告诉 webpack compiler 如下:
“嘿,webpack compiler,当你碰到 ( require / import 语句中被解析为 '.js' 的路径 ) 时,在你把它们添加并打包之前,要先使用 babel-loader 去转换”。
插件 ( Plugins )
插件 ( plugins ) 最常用于( 但不限于 )在打包模块的 compilation 和 chunk 生命周期执行操作和自定义功能。
webpack.config.js
const path = require('path')
const htmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
// ... ...
plugins: [
new htmlWebpackPlugin({
template: path.join(__dirname, './src/index.html')
})
]
}
参考资料:
https://www.jianshu.com/p/36381d7ac6c0
http://webpack.github.io/
网友评论