webpack学习之路

技术胖:慢慢来,其实比较快
第一节课:
webpack的作用:
打包:可以把多个JS文件打包成一个文件,减少服务器压力和下载带宽;
转换:把拓展语言转换成普通的JS,让浏览器顺利运行;
优化:优化性能

npm install --save-dev webpack

这里的参数–save是要保存到package.json中,也就是把webapack的版本号保存在package中,因为webpack的全局安装会导致:局部安装和全局安装webpack版本号不同时,自动使用全局的webpack,所以在这里使用-save把全局的版本号存在局部,是一个必要的操作。dev是在开发时使用这个包,而生产环境中不使用。

第二节课:

webpack {entry file} {destination for bundled file}

把入口文件打包到bundle.js,
live-server已经取代http-server,实现热更新

第三节课:
新建webpack.config.js文件,配置打包

moudel.expors={
    entry:{ // 多入口文件
        entry: __dirname + '/app/main.js', // dirname获取绝对路径
        entry2: __dirname + '/app/main2.js'
    },
    output:{
        path: __dirname + "/dist", // 出口文件路径
        filename: [name].js // 打包文件名同入口文件设置名,如entry.js,entry2.js
    },
    //模块:例如解读CSS,图片如何转换,压缩
    module:{},
    //插件,用于生产模版和各项功能
    plugins:[],
    //配置webpack开发服务功能
    devServer:{}
}

配置入口出口成功后,打包直接输入webpack命令就可以完成打包工作

第四节:
竟然不免费了,胖胖说好最大的免费视频网站呢,说好的初衷不改呢,但是买卖不在仁义还在,视频看不了,下面的文档写的还是很详细的哈,看文档果然效率提高了好多。。。
主要讲devServer的配置:(四个基本的)

devServer:{
    //设置基本目录结构
    contentBase:__dirname,
    //服务器的IP地址,可以使用IP也可以使用localhost
    host:'localhost',
    //服务端压缩是否开启
    compress:true,
    //配置服务端口号
    port:1717
}

首先

npm install webpack-dev-server --save-dev

安装服务。然后配置npm(package.json)

"scripts": {
    "server":"webpack-dev-server"
 },

命令行输入npm run server热启动,实时更新
攻略上写的window系统会出现问题,不能实现热更新,反正我的电脑就是不好使

第五节:loader
加载css等需要通过loader解析,
这里需要手动下载loader
style-loader:
它是用来处理css文件中的url()等,npm中的网址:https://www.npmjs.com/package/style-loader

用npm install 进行项目安装:

npm install style-loader --save-dev

css-loader:
它是用来将css插入到页面的style标签。npm中的网址:https://www.npmjs.com/package/css-loader

用npm install 进行项目安装:

npm install --save-dev css-loader

这里就赤裸裸的抄袭了哈哈,
webpack.config.js

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

补充一下loader的配置项
test:用于匹配处理文件的扩展名的表达式,这个选项是必须进行配置的;
use(loader):loader名称,就是你要使用模块的名称,这个选项也必须进行配置,否则报错;
include/exclude:手动添加必须处理的文件(文件夹)或屏蔽不需要处理的文件(文件夹)(可选);
query:为loaders提供额外的设置选项(可选)。

第六节课:压缩JS代码
开发的JS代码正常是无需压缩的,在服务器上运行的JS代码才需要压缩,所以这个插件在开发的时候不会用到。
引入uglify

const uglify = require('uglifyjs-webpack-plugin');

并在plugins中引用

plugins:[
   new uglify()
],

第七讲:打包HTML文件
首先安装:

npm install --save-dev html-webpack-plugin

在webpack.config.js中引入:

const htmlPlugin= require('html-webpack-plugin');

在plugins中引用:

plugins:[
  new htmlPlugin({
        minify:{
            removeComments:true,
            collapseWhitespace: true,
            removeAttributeQuotes: true
        },
        hash:true,
        template:'./src/index.html'
   })
],

minify:是对html文件进行压缩,removeComments是去掉注释,collapseWhitespace是合并空格,removeAttrubuteQuotes是却掉属性的双引号。
hash:为了开发中js有缓存效果,所以加入hash,这样可以有效避免缓存JS。
template:是要打包的html模版路径和文件名称。

第八讲:图片处理
图片加载的问题出在,打包之后路径有变化,会导致解析错误。这里用到file-loader和url-loader,先安装:

npm install --save-dev file-loader url-loader

在module中配置:

module:{
    rules: [
        {
          test: /\.css$/,
          use: [ 'style-loader', 'css-loader' ]
        },{
           test:/\.(png|jpg|gif)/ ,
           use:[{
               loader:'url-loader',
               options:{
                   limit:500000
               }
           }]
        }
      ]
},

这里test正则匹配文件格式,use中配置相应的处理loader,limit是把小于一定大小的文件打包成Base64的格式,写入JS,只有打包成Base64格式的图片能找到路径,所以也限制了不要把大图片打包,大图片传到服务器上直接引用比较方便一些。
无法打包的图片做背景引用方法
另外url-loader封装了file-loader

第九讲:css分离打包
照例先安装插件:

npm install --save-dev extract-text-webpack-plugin

requier引入

const extractTextPlugin = require("extract-text-webpack-plugin");

plugins中引用:

new extractTextPlugin("/css/index.css")

这里的路径是打包后的路径
module中对css的处理也需要作出修改:

module:{
 rules: [
        {
          test: /\.css$/,
          use: extractTextPlugin.extract({
            fallback: "style-loader",
            use: "css-loader"
          })
        },{
           test:/\.(png|jpg|gif)/ ,
           use:[{
               loader:'url-loader',
               options:{
                   limit:500000
               }
           }]
        }
      ]
},

css分离后,css中对应的图片路径问题也需要处理,这里在出口文件中增添配置:

var website ={
    publicPath:"http://127.0.0.1:1717/"
}

注意,这里的IP和端口,是你本机的ip或者是你devServer配置的IP和端口。

//出口文件的配置项
output:{
    //输出的路径,用了Node语法
    path:path.resolve(__dirname,'dist'),
    //输出的文件名称
    filename:'[name].js',
    publicPath:website.publicPath
},

第十讲:less打包(sass同样)
先安装:

npm install --save-dev less
npm install --save-dev less-loader

配置loader:

{
    test: /\.less$/,
    use: [{
           loader: "style-loader" // creates style nodes from JS strings
        }, {
            loader: "css-loader" // translates CSS into CommonJS
        , {
            loader: "less-loader" // compiles Less to CSS
        }]
}

第十二讲:babel
安装:

npm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react

配置:

{
    test:/\.(jsx|js)$/,
    use:{
        loader:'babel-loader',
        options:{
            presets:[
                "es2015","react"
            ]
        }
    },
    exclude:/node_modules/
}

第十三讲: source-map
在使用webpack时只要通过简单的devtool配置,webapck就会自动给我们生产source maps 文件,map文件是一种对应编译文件和源文件的方法,让我们调试起来更简单。

module.exports = {
  devtool: 'source-map',
  entry:  __dirname + "/app/main.js",
  output: {
    path: __dirname + "/public",
    filename: "bundle.js"
  }
}

第十四讲:第三方插件
需要先引入webpack

const webpack = require('webpack');

全局引入第三方插件

plugins:[
    new webpack.ProvidePlugin({
        $:"jquery"
    })
],

第十五讲:watch
实现自动打包,简单配置一下就可以

watchOptions:{
    //检测修改的时间,以毫秒为单位
    poll:1000, 
    //防止重复保存而发生重复编译错误。这里设置的500是半秒内重复保存,不进行打包操作
    aggregeateTimeout:500, 
    //不监听的目录
    ignored:/node_modules/, 
}

第十六讲:一些优化技巧
这个说起来可能说不完,所以我也没仔细学,用到的时候再来学习吧。
感谢技术胖,虽然我没有买你视频,但还是学到了很多,赋个链接把,算是交学费了
Webpack3.X版 成神之路
进阶学习:
webpack热更新原理
vue的官方脚手架vue-cli到底做了什么?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值