Webpack

您所在的位置:网站首页 webpack四个核心概念 Webpack

Webpack

2023-06-07 20:34| 来源: 网络整理| 查看: 265

1.1 webpack是什么

   webpack是一种前端资源构建工具,一个静态模块打包器(module bundler).在webpack看来,前端的所有资源文件(js/json/css/image/less/...)都会作为模块处理。它将根据模块的依赖关系进行静态分析,打包生成对应的静态资源(bundler)。

image.png 1.2 webpack的五个核心概念

从 webpack v4.0.0 开始,可以不用引入一个配置文件。然而,webpack 仍然还是高度可配置的。在开始前你需要先理解四个核心概念:

入口(entry) 入口起点(entry point)指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的开始。进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖的。

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

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

插件(plugins) loader 被用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。插件接口功能极其强大,可以用来处理各种各样的任务。

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

模式(mode) 通过选择 development 或 production 之中的一个,来设置 mode 参数,你可以启用相应模式下的 webpack 内置的优化 生产环境webapck.config.js栗子 const {resolve}=require('path'); const MiniCssExtractPlugin=require('mini-css-extract-plugin'); const OptimizeCssAssetsPlugin=require('optimize-css-assets-webpack-plugin');// css 压缩 const HtmlWebpackPlugin = require("html-webpack-plugin"); //引入plugins插件 //设置nodejs环境变量 决定使用browserslist的哪个环境 process.env.NODE_ENV = "production"; const commonCssLoader=[ MiniCssExtractPlugin.loader, 'css-loader', // 'postcss-loader',修改loader的配置 { // 需要在package.json中添加browerslist loader: "postcss-loader", options: { ident: "postcss", plugins: () => [ //postcss的插件 require("postcss-preset-env")(), ], }, } ] module.exports={ entry:'./src/js/index.js', output:{ filename:'js/built.js', path=resolve.path(__dirname,'build') }, module:{ rules:[ { test: /\.css$/, use:[...commonCssLoader] }, { test: /\.less$/, use:[...commonCssLoader,'less-loader' ] }, /** * 正常来讲 一个文件只能被一个loader处理 * 当一个文件需要被多个loader处理,那么一定要指定loader执行的先后顺序: * 先执行eslint 再执行babel */ { // 在packages.json中eslintConfig --> airbnb test: "/.js$/", // 排除modules模块的js exclude: /node_modules/, // 优先执行 enforce:'pre', loader:'eslint-loader', options:{ //自动按照语法修复 fix:true } }, { // js兼容性处理 test: "/.js$/", // 排除modules模块的js exclude: /node_modules/, loader:'eslint-loader', options:{ //自动按照语法修复 presets:[ [ '@babel/preset-env', { // 按需加载 useBuiltIns: "usage", //指定core-js版本 corejs: { version: 3}, //指定兼容性做到哪个版本浏览器 targets: { chrome: "60", firefox: "60", }, }, ] ] } }, { test: "/.(jpg|png|gif)/", loader: "url-loader", options: { limit: 8 * 1024, name:'[hash:10].[ext]', esModual:false, outputPath:'images' }, }, { //处理不了html图片,路径文件图片找不到 test: "/.html/", //处理html文件的img图片(负责引入img,从而被url-loader进行处理) loader: "html-loader", }, { exclude:/\.(js|css|less|html|jpg|png|gif)/, loader:'file-loader', options: { outputPath:'media' }, } ] }, plugins:[ new MiniCssExtractPlugin({ filename:'css/built.css' }), new OptimizeCssAssetsPlugin(), new HtmlWebpackPlugin({ template: "./src/index.html", minify: { // 移除空格 collapseWhitespace: true, // 移除注释 removeComments: true, }, }), ], mode:'production' }

推荐视频教程 尚硅谷2020最新版Webpack5实战教程(从入门到精通)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3