webpack学习笔记

什么是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等

先总结这些吧 后面继续~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 全局安装webpack 全局安装webpack会有个问题,就是当你有两个项目依赖于不同版本的webpack,就会有...
    説好的妹紙呢阅读 1,803评论 0 11
  • http://blog.csdn.net/weizengxun/article/details/53448885 ...
    晓卢轩阅读 603评论 0 0
  • 学习目的 学习前端构建化工具 webpack,能熟练掌握 并使用 webpack 对项目进行打包优化。 ...
    _1633_阅读 1,347评论 0 7
  • 本文主要分为:环境配置使用配置文件CSS 处理ES6 代码编辑文件压缩SASS 处理CSS 与 JS 分离文件处理...
    _月光临海阅读 489评论 0 1
  • Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成...
    EarthChen阅读 389评论 0 1