发表于: 2020-08-04 21:00:58
0 2150
一,今天完成的事情
学习了一下webpack
Webpack 是当下最热门的前端资源模块化管理和打包工具。它可以将许多松散的
模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的
模块进行代码分隔,等到实际需要的时候再异步加载。通过 loader 的转换,
任何形式的资源都可以视作模块,比如 CommonJs 模块、 AMD 模块、
ES6 模块、CSS、图片、 JSON、Coffeescript、 LESS 等。
四个核心概念:
- 入口(entry)
- 输出(output)
- loader
- 插件(plugins)
1,入口(entry)
入口起点(entry point)指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的开始。
进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖的。
每个依赖项随即被处理,最后输出到称之为 bundles 的文件中,我们将在下一章节详细讨论这个过程。
可以通过在 webpack 配置中配置 entry
属性,来指定一个入口起点(或多个入口起点)。默认值为 ./src
。
接下来我们看一个 entry
配置的最简单例子:
webpack.config.js
module.exports = {
entry: './path/to/my/entry/file.js'};
T> 根据应用程序的特定需求,可以以多种方式配置 entry
属性。从入口起点章节可以了解更多信息。
出口(output)
output 属性告诉 webpack 在哪里输出它所创建的 bundles,以及如何命名这些文件,
默认值为 ./dist
。基本上,整个应用程序结构,都会被编译到你指定的输出路径的文件夹中
。你可以通过在配置中指定一个 output
字段,来配置这些处理过程:
webpack.config.js
const path = require('path');module.exports = {
entry: './path/to/my/entry/file.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'my-first-webpack.bundle.js'
}
};
在上面的示例中,我们通过 output.filename
和 output.path
属性,来告诉 webpack bundle 的名称,
以及我们想要 bundle 生成(emit)到哪里。可能你想要了解在代码最上面导入的 path 模块是什么,
它是一个 Node.js 核心模块,用于操作文件路径。
T> 你可能会发现术语生成(emitted 或 emit)贯穿了我们整个文档和插件 API。
它是“生产(produced)”或“释放(discharged)”的特殊术语。
T> output
属性还有更多可配置的特性,如果你想要了解更多关于 output
属性的概念,
你可以通过阅读概念章节来了解更多。
loader
loader 让 webpack 能够去处理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)。
loader 可以将所有类型的文件转换为 webpack 能够处理的有效模块,然后你就可以利用
webpack 的打包能力,对它们进行处理。
本质上,webpack loader 将所有类型的文件,转换为应用程序的依赖图(和最终的 bundle
)可以直接引用的模块。
W> 注意,loader 能够 import
导入任何类型的模块(例如 .css
文件),
这是 webpack 特有的功能,其他打包程序或任务执行器的可能并不支持。
我们认为这种语言扩展是有很必要的,因为这可以使开发人员创建出更准确的依赖关系图。
在更高层面,在 webpack 的配置中 loader 有两个目标:
test
属性,用于标识出应该被对应的 loader 进行转换的某个或某些文件。use
属性,表示进行转换时,应该使用哪个 loader。
webpack.config.js
const path = require('path');const config = {
output: {
filename: 'my-first-webpack.bundle.js'
}, module: {
rules: [
{ test: /\.txt$/, use: 'raw-loader' }
]
}
};module.exports = config;
以上配置中,对一个单独的 module 对象定义了 rules
属性,里面包含两个必须
属性:test
和 use
。这告诉 webpack 编译器(compiler) 如下信息:
“嘿,webpack 编译器,当你碰到「在
require()
/import
语句中被解析为 '.txt' 的路径」时,在你对它打包之前,先使用
raw-loader
转换一下。”
W> 重要的是要记得,在 webpack 配置中定义 loader 时,要定义在 module.rules
中,
而不是 rules
。然而,在定义错误时 webpack 会给出严重的警告。为了使你受益于此,
如果没有按照正确方式去做,webpack 会“给出严重的警告”
loader 还有更多我们尚未提到的具体配置属性。
插件(plugins)
loader 被用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。
插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。
插件接口功能极其强大,可以用来处理各种各样的任务。
想要使用一个插件,你只需要 require()
它,然后把它添加到 plugins
数组中。
多数插件可以通过选项(option)自定义。你也可以在一个配置文件中因为不同目
的而多次使用同一个插件,这时需要通过使用 new
操作符来创建它的一个实例。
webpack.config.js
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;
webpack 提供许多开箱可用的插件!查阅我们的插件列表获取更多信息。
在 webpack 配置中使用插件是简单直接的,然而也有很多值得我们进一步探讨的用例。
模式
通过选择 development
或 production
之中的一个,来设置 mode
参数,
你可以启用相应模式下的 webpack 内置的优化
module.exports = {
mode: 'production'};
二,开始复习知识点,为复盘做准备
评论