webpack 概念

  • A+
所属分类:webpack

什么是webpack

webpack是一个现代javascript应用程序的静态模块打包工具。当webpack处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每一个模块,然后将所有这些模块打包成一个或多个bundle.

入口【entry】

入口起点指示webpack应该使用哪个模块,来作为构建其内部依赖图的开始。进入入口起点后,webpack会找出有哪些模块和库是入口起点(直接和间接)依赖的。每个依赖项随即被处理,最后输出到bundles文件中。

可以通过在webapck配置中的entry属性,来指定一个或多个入口起点。默认值为./src。

webpack.config.js

module.exports = {entry:'./src/main.js'}

出口【output】

output属性告诉webpack在哪里输出他所创建的bundles,以及如何命名这些文件,默认值为./dist。基本上,整个应用程序结构都会被编译到你制定的输出路径的文件夹中。你可以通过在配置文件中指定的output字段来配置这些处理过程。

webpack.config.js

const path = require('path')

module.exports = {

entry:'./src/main.js,

output:{path:path.resolve(__dirname,'dist'), filename:'bundles.js'}

}

我们通过output.filename告诉webpack bundle的名称,通过output.path告诉我们想要bundle生成到哪里。

loader

loader让webpack能够去处理那些非javascript文件。loader可以将所有类型的文件转换为webpack能够处理的有效模块,然后你就可以利用webpack的打包能力对他们进行处理。

本质上,webpack loader将所有类型的文件转换为应用程序的依赖图(和最终的bundle)可以直接引用的模块。

loader能够import导入任何类型的模块,这是webpack特有的功能。

在更高层面,在webpack的配置中loader有两个目标:

  1. test属性:用于标识出应该被应用的loader进行转换的某个或某些文件。
  2. use属性:表示进行转换时,应该使用哪个loader。

const path = require('path');

const config = {

output:{filename:'bundle.js'},

module:{rules:[{test:/\.txt$/,use:'raw-loader'}]}

};

module.exports = config;

以上配置中,对一个单独的module对象定义了rules属性,里面包含两个必须属性:test 和 use。这告诉webpack 当碰到require()/import语句中被解析为‘./txt’的路径时,在对他打包之前,先试用 raw-loader转换一下。

重要的是要记得,在 webpack 配置中定义 loader 时,要定义在 module.rules 中,而不是 rules

插件【plugins】

loader被用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。

想要使用一个插件,你只需要require()它,然后把它添加到plugins数组中。多数插件可以通过选项(option)定义。你也可以在一个配置文件中因为不同目的多次使用同一插件,这时需要通过使用new操作符来创建它的一个实例。

 

const HtmlWebpackPlugin = require('html-webpack-plugin');

const webpack = require('webpack');

const config = {

module:{rules:[{test:/\.txt$/,use:'raw-loader'}]}

plugins:[new HtmlWebpackPlugin(template:'./src/index/html')]

}

module.exports = config

模式

通过选择 development 或 production 之中的一个,来设置 mode 参数,你可以启用相应模式下的 webpack 内置的优化

 

module.exports={

mode:'development'

}

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的QQ
  • 我的QQ扫一扫
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: