webPack 学习记录

    科技2022-07-11  86

    一、概念

    Webpack是一个模块打包器(bundler)。 在Webpack看来, 前端的所有资源文件(js/json/css/img/less/…)都会作为模块处理,它将根据模块的依赖关系进行静态分析,生成对应的静态资源 四个核心概念:

    Entry:入口起点(entry point)指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的开始。Output:output 属性告诉 webpack 在哪里输出它所创建的 bundles,以及如何命名这些文件,默认值为 ./dist。Loader:loader 让 webpack 能够去处理那些非 JavaScript 文件(webpack 自身只能解析: JavaScript、json)。Plugins:插件则可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量等。

    关于Loader:

    Webpack 本身只能加载JS/JSON模块,如果要加载其他类型的文件(模块),就需要使用对应的loader 进行转换/加载Loader 本身也是运行在 node.js 环境中的 JavaScript 模块它本身是一个函数,接受源文件作为参数,返回转换的结果loader 一般以 xxx-loader 的方式命名,xxx 代表了这个 loader 要做的转换功能,比如 json-loader。

    关于Plugins:

    插件件可以完成一些loader不能完成的功能。插件的使用一般是在 webpack 的配置信息 plugins 选项中指定。CleanWebpackPlugin: 自动清除指定文件夹资源HtmlWebpackPlugin: 自动生成HTML文件UglifyJSPlugin: 压缩js文件

    webpack.config.js : 是一个node模块,返回一个 json 格式的配置信息对象

    官方文档

    二、webpack的基本使用

    1、 生成package.json文件

    npm init //初始化(在对应的文件中)

    2、安装webpack(都要安装):

    npm install webpack -g //全局安装 npm install webpack --save-dev //局部安装

    3、执行命令:

    webpack src/js/index.js build/index.js //webpack会把es6的模块化语法编译成浏览器能够识别的语言。

    4、package配置:

    "scripts": { "build": "webpack" },

    打包应用运行:npm run build

    三、使用webpack配置文件

    webpack的核心配置文件:执行webpack命令时,会在当前目录查找webpack.config.js文件读取配置

    entry:入口文件,将所有打包资源全部引入output:输出文件,将资源输出到指定目录下loader:处理webpack不能够解析的模块plugins:执行loader做不了的任务 const path = require('path'); //path内置的模块,用来设置路径。 module.exports = { entry:'./src/js/index.js', //入口(从哪里进入开始解析) output: { //出口(最终加工完的代码输出到哪里) path: path.resolve(__dirname, 'build'),//输出文件路径配置 filename: 'index.js',// 输出文件名 } };

    四、使用loader解析文件

    使用less-loader处理less文件:

    安装:npm install less-loader less --save-D安装:npm install css-loader style-loader --save-D向rules中写入配置: { test: /\.less$/, use: [{ loader: "style-loader" // 创建一个style标签,将js中的css放入其中 }, { loader: "css-loader" // 将css以CommonJs语法打包到js中 }, { loader: "less-loader" // 将less转换成css }] }

    在入口js中引入less文件:import ‘…/less/test.less’;(为了让打包时使用此文件)

    使用file-loader处理图片资源:

    安装:npm install --save-dev file-loaderloader: { test: /\.(png|jpg|gif)$/, use: [ { loader: 'file-loader', //如果不做图片转base64,可以用file-loader options: { outputPath:'img', //图片最终输出的位置 publicPath:'../build/img',//css资源图片路径 name:'[hash:5].[ext]'//修改图片名称 } } ] }

    使用url-loader处理图片资源

    安装:npm install url-loader --save-Dloader: { test: /\.(png|jpg|gif)$/, use: [ { loader: 'url-loader', //如果不做图片转base64,可以用file-loader options: { limit: 8192, //设置文件的最大的大小,大于8KB不转换,小于8KB转成base64 outputPath:'img', //图片最终输出的位置 publicPath:'../build/img',//css资源图片路径 name:'[hash:5].[ext]' //修改图片名称 } } ] }

    js语法检查

    安装jshint-loader: npm i jshint-loader --save -D npm i jshint --save -D 新增loader: { test: /\.js$/, // 涵盖 .js 文件 enforce: "pre", // 预先加载好 jshint loader exclude: /node_modules/, // 排除掉 node_modules 文件夹下的所有文件 use: [ { loader: "jshint-loader", options: { //jslint 的错误信息在默认情况下会显示为 warning(警告)类信息 //将 emitErrors 参数设置为 true 可使错误显示为 error(错误)类信息 emitErrors: false, //jshint 默认情况下不会打断webpack编译 //如果你想在 jshint 出现错误时,立刻停止编译 //请设置 failOnHint 参数为true failOnHint: false } } ] }

    es6转es5

    安装babel-loader: npm install babel-loader babel-core babel-preset-es2015 --save -D npm i babel-loader@7 --save -D loader: { test: /\.js$/, exclude: /(node_modules|bower_components)/, use: { loader: 'babel-loader', options: { presets: ['es2015'] } } }

    五、使用插件

    提取css,合并为单独的文件

    安装ExtractTextWebpackPlugin插件: npm install extract-text-webpack-plugin --save-D 引入插件: const ExtractTextPlugin = require("extract-text-webpack-plugin"); 新增plugins插件配置项,并实例化ExtractTextPlugin插件: plugins: [ //提取css为单独文件 new ExtractTextPlugin("./css/index.css"), ] 修改原less-loader的配置如下: { test: /\.less$/, //匹配文件的规则,说明该loader对哪个文件生效 use: ExtractTextPlugin.extract({ fallback: "style-loader", use: ["css-loader","less-loader"] }) }

    注:因为css提取成单独文件,不再包含在js中了,所以要修改url-loader配置publicPath:’…/build/img’ html文件的处理和清除文件夹(插件HtmlWebpackPlugin)

    安装: npm install --save-dev html-webpack-plugin 引入插件: var HtmlWebpackPlugin = require('html-webpack-plugin'); 新增一个插件配置项: new HtmlWebpackPlugin({ title:"webpack", filename:"index.html", template:"./src/index.html" }) 备注:要在html模板中写入<title><%= htmlWebpackPlugin.options.title %></title>,title配置才生效 删除掉模板html中的所有引入为了清空工作目录,安装插件(clean-webpack-plugin): npm i clean-webpack-plugin -D 引入插件: new CleanWebpackPlugin('./build') 备注:最新版的CleanWebpackPlugin不传任何参数

    六、build环境的搭建

    新建文件目录:config移动webpack.config.js文件到config中,改名为:webpack.build.js通过执行:webpack --display-modules --config ./config/webpack.build.js 指定配置文件运行在package.json中自定义命令,以后可以通过:npm run build 代替完整命令 "build": "webpack --display-modules --config ./config/webpack.build.js"

    注:如果发现build文件夹出现在了config中,解决办法如下:

    修改出口output中的path为: resolve(__dirname, '../build')

    Processed: 1.269, SQL: 8