美文网首页
webpack相关配置

webpack相关配置

作者: 慕尼黑凌晨四点 | 来源:发表于2021-01-16 18:19 被阅读0次

webpack简介

本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle

image-20210116120049531.png

webpack五个核心概念

Entry(入口)

webpack以哪个文件为入口开始打包,分析构建内部依赖图。

OutPut(输出)

打包后的bundles输出到哪里,以及如何命名。

Loader

处理非js文件(webpack本身只能处理js文件)

Plugins(插件)

赋予一些更强劲的功能。

Mode

主要指定webpack响应模式的配置:

选项 描述 特点
development 开发模式
production 生产(线上)模式

webpack配置

//webpack.config.js
const { resolve } = require('path')

module.exports = {
    entry:"./src/index.js",
    output:{
        //输出文件名
        filename:'build.js',
        //输出路径一般为绝对路径
        //__dirname是nodejs的变量,代表当前文件的绝对路径
        path:resolve(__dirname,'build')
    },
    
    //loader的配置
    module:{
        rules:[
            
        ]
    },
    
    //plugins的配置
    plugins:[
    
    ],
    
    mode:'development',
    //mode:'production'
}

开发环境要做的事

打包样式资源

要用到loader。 下载--使用

css处理

npm i css-loader,style-loader

使用:

module.exports = {
    ...
    //loader的配置
    module:{
        rules:[
            {
                //处理哪些文件
                test:/\.css$/,
                //使用哪些loader进行处理
                use:[
                    //use顺序是从右到左(从下到上)
                    //创建style标签,将js中的样式资源插入到head中
                    'style-loader',
                    //将css样式编程commonjs模块加载到js中,里面内容是字符串 
                    'css-loader'
                ]
            }
        ]
    },
    ...
}

处理流程:

  1. 先从入口文件开始打包,如果遇到引用文件,则将其引入。

  2. 每次引入的文件先经过loader配置进行过滤:

    2.1 如果匹配到了test中的资源,则用use中的loader进行处理,处理顺序从右往左。

    2.2 先用css-loader进行处理,将css文件写入js;

    2.3 然后通过style-loader将js中的css字符串写进head中。

less处理

npm i less,less-loader
module.exports = {
    ...
    //loader的配置
    module:{
        rules:[
            {
                test:/\.less$/,
                use:[
                    'style-loader',
                    'css-loader',
                    //将less编译成css
                    'less-loader'
                ]
            }
        ]
    },
    ...
}

语义和css一样。

打包HTML资源

要用到plugins:下载--引入--使用:

 npm i html-webpack-plugin
//引入
const HtmlWebPackPlugin = require('html-webpack-plugin')

module.exports = {
    ...
    plugins:[
        //默认会创建一个空的html,自动引入打包输出的所有资源
        new HtmlWebPackPlugin({
            //复制这个index.html文件,并自动引入打包输出的所有资源
            template: './index.html',
        })
    ],
}

打包图片资源

npm i url-loader file-loader # 处理图片
npm i html-loader # 引入HTML中的图片
module.exports = {
    ...
    //loader的配置
    module:{
        rules:[
            {
                test:/\.(jpg|png|gif)$/,
                loader:'url-loader',
                options:{
                    //图片小于8kb,就会被base64处理
                    limit:8*1024,
                    //命名为hash值前10位+后缀
                    name:'[hash:10].[ext]'
                }
            },{
                test:/\.html$/,
                //处理html中的img图片的引入
                loader:'html-loader'
            }
        ]
    },
    ...
}

其他资源

特点:无需做任何处理,原样打包过去就行。

rules:[
{
    //排除
    exclude:/\.(css|js|html)$/,
    loader:'file-loader'
}
]

开发服务器(自动编译,自动刷新)

npm i webpack-dev-server -D
module.exports = {
    ...
    //在内存中编译打包,不会有输出
    //指令为npx webpack-dev-server
    devServe:{
        //要运行的代码目录
        contentBase:resolve(__dirname,'dist'),
        //压缩
        compress:true,
        port:3000,
        //自动打开浏览器
        open:true
    }
}

文件分类

项目中的文件是有分类的,比如js、css、img资源等。所以要想输出的资源也分门别类的放好,所以要加outputPath属性。

js 更改filename

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

其他的用outputPath

在options中添加outputPath

{
    test:/\.(jpg|png|gif)$/,
    loader:'url-loader',
    options:{
        //图片小于8kb,就会被base64处理
        limit:8*1024,
        name:'[hash:10].[ext]',
        outputPath:'res/imgs'
    }
},{
    //排除
    exclude:/\.(css|js|html|less|jpg|png|gif)$/,
    loader:'file-loader',
    options:{
        name:'[hash:10].[ext]',
        outputPath:'res/media'
    }
}

css文件不会有输出,因为css会被写入到js中去。


以上内容合并起来就是一个简单的webpack开发环境的配置。具体可以参考:https://gist.github.com/caoyangim/cb49b34bcf0dcf1d9ac9d3fdcc765480

配置完成之后运行指令有两条,一个输出最终资源,一个直接展示成果:

webpacknpx webpack serve

生产(线上)环境要做的事

提取css成单独文件

mini-css-extract-plugin:会生成单独的css文件。

css兼容性处理

postcss-loader:生成的css文件中会自动处理兼容性问题。

css压缩

optimize-css-assets-webpack-plugin

语法检查

eslint-loader eslint

检查规则在package.json中设置:这里用airbnb规则,用eslint-config-airbnb

npm i eslint-loader eslint eslint-config-airbnb
//package.json中:
"eslintConfig":{
    "extends":"airbnb-base"
}
//webpack.config.jsz中
module:{
    rules:[
        {
            test:/\.js$/,
            exclude:/node_modules/,
            loader:'eslint-loader',
            options:{
                //自动修复
                fix:true
            }
        }
    ]
}

js兼容性

babel-loader兼容es6语法到低版本浏览器

js压缩

mode:production 生产环境会自动压缩js

html压缩

Html-webpack-plugin

new HtmlWebpackPlugin({
    template:"./src/index.html",
    minify:{
        //移除空格
        collapseWhitespate:true,
        //移除注释
        removeComments:true
    }
})

相关文章

网友评论

      本文标题:webpack相关配置

      本文链接:https://www.haomeiwen.com/subject/euanaktx.html