美文网首页
webpack学习笔记

webpack学习笔记

作者: isSunny | 来源:发表于2019-08-13 14:30 被阅读0次

    什么是webpack?

    webpack是一个模块管理工具,用webpack可以管理模块依赖,并编译模块所需的静态文件。它可以很好的管理打包开发中用到的html、css、js以及静态文件(图片,字体),使开发更有效率。
    webpack对不同的类型资源,有对应的模块加载器(loader)。
    webpack模块打包器会分析模块间的依赖关系,最后生成优化且合并后的静态资源。

    webpack是以CommonJs规范书写代码,但是对CMD/AMD也支持。

    webpack工作流程:

    1.通过entry配置入口文件;(如果多个入口文件,用对象形式表示)
    2.通过output配置出口文件;

    entry:'./src/index.js',//入口
    output:{//出口
          filename:'bundle.js',//打包后的文件名
             //filename:'bundle.[hash:8].js',   //如果希望文件每次生成的新的不一样文件 也可以加hash戳  在中间加入[hash] :8的意思是只显示8位
          path:path.resolve('build'),//路径必须是一个绝对路径
    },
    

    3.使用各种loader处理css、js、image等资源,并将它们编译与打包成浏览器可以解析的内容。

    安装webpack

    • 安装本地的webpack
    • npm init (先初始化)
    • npm install wepack webpack-cli -D //-D是 --save-dev缩写

    webpack可以进行0配置

    • 打包工具->输出后的结果(js模块)

    • 打包src文件夹下的

    • npx webpack

    • 打包后会出现一个dist文件

    • 打包(支持我们JS 的模块化)

    手动配置webpack

    • 默认配置文件的名字是 webpack.config.js
      • 如果更改配置文件的名字 如webpack.config.my.js
      • 运行命令行为 npx webpack --config webpack.config.my.js -D
        需要在package.json文件增加scripts,里面放入build
        "scripts": {
        "build": "webpack --config xxx",(xxx为新的名字)
        },
      • 运行命令行为 npm run build
      • 如果把build里面 名字去掉 只留下webpack,此时运行 npm run build -- --config xxx (中间--不要省略 否则会报错)
    开发时想用ip地址来访问,webpack内置了一个开发服务,是通过express实现了一个静态服务。
    • npm install webpack-dev-server -D

    • 执行 npx webpack-dev-server

    • 也可以配置packge.json 中scripts
      "scripts": {
      "build": "webpack --config webpack.config.js",
      "dev": "webpack-dev-server"
      },

    • 执行命令行 npm run dev
      (好处是并不会真是的打包文件,而是在生成的内存中打包)

    • 如果想在当前目录下执行,需要在webpack.config.js里进行配置

      devServer:{//开发服务器的配置
      port:3000,//设置的端口号
      progress:true,//是否有进度条
      contentBase:'./build',//指定的目录名运行
      compress:true//启动UglifyJsPlugin压缩
      },

    想要自动建立html 然后打包在内存中,就需要插件 html-webpack-plugin
    • 运动命令行 npm install html-webpack-plugin -D
    • 然后在webpack.config.js进行配置
        plugins:[//是一个数组,放着所有的webpack插件
            new HtmlWebpackPlugin({//自动生成打包后的HTML模板插件类
                template:"./src/index.html",//模板
                filename:'index.html',
                minify:{//压缩html文件
                    removeAttributeQuotes:true,//删除双引号
                    collapseWhitespace:true//压缩成一行
                },
                hash:true, //插入的js文件带hash戳,为了缓存问题
            })
    
         ]      
    
    

    (记住每次先npm run build打包 然后在npm run dev运行)

    处理css

    在js里引入css模块,需要把css变成模块然后在js中引入 需要合适的loader解析文件

    • npm install css-loader style-loader -D

    • css-loader 是解析

    • 也可以处理less文件 sass stylus node-sass sass-loader stylus stylus-loader

    • 配置webpack.config.js

     module:{
            rules:[//规则解析 
                //css-loader解析@import这种语法
                //style-loader 是将css插入到head标签中
                //loader的特点,希望单一
                //loader的用法,字符串只用一个loader,如果多个loader需要[]
                //loader的顺序是 默认从右向左执行,从下到上执行
                //loader可以写成对象方式
        
                {test:/\.css$/,use:
                    [
                        {
                            loader:'style-loader',
                            options:{//配置指向
                                insertAt:'top'//让css插入在最上面
                            }
                        },
                            'css-loader'
                    ]
               },//匹配正则,配置后缀为.css的文件
               //可以处理less文件 sass stylus node-sass sass-loader stylus stylus-loader
               {test:/\.less$/,use:
                [
                    {
                        loader:'style-loader',
                    },
                    'css-loader',
                    'less-loader'//把less=》css
                ]
               }
            ]
         }//配置模块
    
    如果把css抽离 用link标签插入需要插件 mini-css-extract-plugin
    • npm install mini-css-extract-plugin -D
    css样式自动加前缀 需要安装插件 postcss-loader
    • npm install postcss-loader antuprefixer -D

    • 在webpack.config.js的配置模块里 加入‘postcss-loader’

    • 需要创建一个postcss.config.js的配置文件
      module.exports = {
      plugins:[require('autoprefixer')]
      }

    压缩css文件,需要安装插件 optimize-css-assets-webpack-plugin
    let OptCssAssets=require('optimize-css-assets-webpack-plugin');//压缩css文件
    module.exports = {
        optimization:{//优化项
            minimizer:[
                new OptCssAssets()
            ]
        },
    }
    
    将高级语法转换成es5
    es6转换成es5 安装babel
    • 需要安装转换loader babel-loader @babel/core @babel/preset-env
    • 运行命令行 npm install babel-loader @babel/core @babel/preset-env -D
    • 配置webpack.config.js,在module里的rules配置规则
    {
                test:/\.js$/,
                use:{
                    loader:'babel-loader',
                    options:{//用babel-loader需要把es6转换成es5
                        presets:[//预设 
                            '@babel/preset-env'
                        ]
    
                    }
            }
    },
    
    如果出现es7语法,class类 需要安装@babel/plugin-proposal-class-properties
    @babel/plugin-transform-runtime
    • 在转换 ES2015 语法为 ECMAScript 5 的语法时,babel 会需要一些辅助函数,例如 _extend。babel 默认会将这些辅助函数内联到每一个 js 文件里,这样文件多的时候,项目就会很大。
    • babel 提供了 transform-runtime 来将这些辅助函数“搬”到一个单独的模块 babel-runtime 中,这样做能减小项目文件的大小。

    Polyfill提供的就是一个这样功能的补充,实现了Array、Object等上的新方法,实现了Promise、Symbol这样的新Class等

    先总结这些吧 后面继续~

    相关文章

      网友评论

          本文标题:webpack学习笔记

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