美文网首页虫虫
webpack学习总结

webpack学习总结

作者: 读书的鱼 | 来源:发表于2019-02-21 12:41 被阅读56次

    1-1.webpack究竟是什么?

    webpack其实就是一个模块打包器。

    1-2.什么是模块打包工具?

    1-3.webpack的正确安装方式?

    1-4.使用webpacl的配置文件

    1-5.webpack打包的输出内容

    2-1什么是loader?

    loader其实就是一个打包的方案。
    webpack本身是打包js文件的,但是遇到图片、样式、文件等等时,需要我们进行打包的时候,那么就需要借助其他插件来进行打包,那么除了需要安装依赖之外,还要在webpack.config.js进行配置。
    下面是图片进行打包的例子:
    第一安装file-loader,

    npm install file-loader -D
    

    第二配置webpack.config.js

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

    2-2试用loader打包静态资源(图片篇)

    file-loader 或者 url-loader

    module:{
            rules: [{
                test: /\.(jpg|png|gif)$/,
                use: {
                    loader: 'url-loader', //file-loader
                    options:{
                        //placeholder 占位符
                        name:'[path][name].[ext]',
                        outputPath:'images/',
                        limit:1000
                    }
                }
            }]
        }
    

    2-3试用loader打包静态资源(样式篇-上)

    style-loader、css-loader、sass-loader、node-sass、postcss-loader、autoprefixer
    我们使用postcss-loader和autoprefixer两个插件的时候,可以帮我们自动加上css3的一些前缀,那么需要我们对webpack.config.js和postcss.config.js分别进行配置
    postcss.config.js

    module.exports = {
      plugins: [
        require('autoprefixer')
      ]
    }
    

    webpack.config.js

    module:{
            rules: [{
                test: /\.scss$/,
                use: [
                    'style-loader',
                    'css-loader',
                    'sass-loader',
                    'postcss-loader'
                ]
            }]
        }
    

    值得注意的是:
    loader顺序不能随意写,有优先顺序的(从上到下,从右到左) 应该先是用autoprefixer和postcss-loader给样式添加前缀,其次采用sass-loader对scss文件进行转义为css,再采用css-loader,分析几个css之间的关系,在把这些css文件汇总合并到一个css文件中,最后style-loader再把生成css片段挂载到head里面的style中

    2-4试用loader打包静态资源(样式篇-下)

    1).importLoaders:2
    2).modules:true
    3).打包文字的时候使用:flie-loader

    module:{
            rules: [{
                test: /\.(jpg|png|gif)$/,
                use: {
                    loader: 'url-loader',//file-loader
                    options:{
                        //placeholder 占位符
                        name:'[path][name].[ext]',
                        outputPath:'images/',
                        limit:1000
                    }
                }
            },{
                test: /\.scss$/,
                use: [
                    'style-loader',
                    // 'css-loader',
                    {
                        loader:'css-loader',
                        options: {
                            importLoaders: 2, //通过@import 引入的scss文件也会通过sass-loader和postcs-loader先处理再会来到css-loader这一步过程中
                            modules:true //样式模块化设置,单个页面的js文件中的样式不会影响到其他js页面中样式
                        }
                    },
                    'sass-loader',
                    'postcss-loader'
                ]
            },{
                test: /\.(eot|svg|ttf|woff|woff2)$/,
                use:{
                    loader:'file-loader'
                }
            }]
        }
    

    2-5 使用 plugins 让打包更便捷

    plugin插件可以在webpack在运行到某一时刻的时候,帮助做一些事情
    html-webpack-plugin:会在打包结束后,自动生成一个index.html文件,并且把打包生成的js自动引入到html中
    clean-webpack-plugin:在进行打包的时候,先把dist目录下面的所有文件进行删除

    2-6 Entry 与 Output 的基础配置

    entry:后面可以跟一个入口文件的字符串,也可以跟一个对象
    output:可以通过filename:'[name].js'设置来自动给entry设置的文件来定义输出文件名称,
    如果不设置filename参数,那么main.js则是默认的文件名称会被生成
    publicPath:如果生成的bundle.js 或者 dist.js 会放到cdn上面,那么我们在通过html-webpack-plugin自动生成html的时候,就要把bundle.js或者dist.js文件路径上添加远程cdn地址

    // entry:'./index.js',
        entry:{
            main:'./index.js',//会自动生成main.js
            sub:'./index.js'//会自动生成sub.js     生成的名称由参数名称决定
        },
        output: {
            // filename: 'bundle.js',
            filename:'[name].js',
                    publicPath:'http://www.cdn.com/'
            path: path.resolve(__dirname,'dist')
        },
    

    2-7 SourceMap 的配置

    sourceMap:
    当 webpack 打包源代码时,可能会很难追踪到错误和警告在源代码中的原始位置。例如,如果将三个源文件(a.js, b.js 和 c.js)打包到一个 bundle(bundle.js)中,而其中一个源文件包含一个错误,那么堆栈跟踪就会简单地指向到 bundle.js。这并通常没有太多帮助,因为你可能需要准确地知道错误来自于哪个源文件。

    devtool:'cheap-module-eval-source-map' //适用于development环境
    devtool:'cheap-module-source-map'//适用于production环境
    

    source-map:会生成.map文件(bundle.js和其他js一个映射关系的一个map文件),速度比较慢
    inline-source-map:也会生成map相关的代码,但是这些代码不是文件形式存在的,而是生成后放到main.js 或者bundle.js文件的末尾,速度比较慢
    cheap:针对的是自己业务代码错误的一个校验提示,只提示你多少行出错了,不回提示你列出错
    module:针对的是第三库错误的一个检验提示
    eval:速度非常快,但是错误提示信息不回很全

    2-8 使用 WebpackDevServer 提升开发效率

    1).watch
    2).webpack-dev-server
    优点:
    检测文件更改,
    自动编译打包,
    自动打开默认浏览器,
    访问地址一个带有http的一个请求地址(便于ajax请求,在devServer的配置项中有一个proxy属性,这个属性可以实现跨域代理)

    package.json配置如下:

    "scripts": {
        "build": "webpack",
        "watch": "webpack --watch",
        "start": "webpack-dev-server"
      },
    

    webpack.config.js配置如下:

    devServer:{
            contentBase:'./dist',
            port: 8081,
            open: true
        },
    

    学习链接地址https://webpack.docschina.org/guides/development/

    2-10 Hot Module Replacement 热模块更新

    devServer:{
            contentBase:'./dist',
            port: 8081,
            open: true,
            hot: true, //需要配置
            hotOnly: true////需要配置
        },
    
    plugins:[
            new htmlWebpackPlugin({
                template:'index.html'
            }),
            new cleanWebpackPlugin(['dist']),
            new webpack.HotModuleReplacementPlugin() //需要配置的
        ]
    

    相关文章

      网友评论

        本文标题:webpack学习总结

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