webpack基础原理

1.webpack基础介绍:
webpack可以看做是模块的打包机,主要做的事情是,分析项目结构,将一些项目模块找出来,打包成浏览器可以执行的js代码,并把浏览器一些不认识的拓展语言(scss,jsx,vue等)转换成符合浏览器认识的语言。
2.webpack4的基本配置项讲解:

  • 首先生成package.json为了记录我们安装过得包:npm init (ps:一直点回车)
  • 运行cnpm i webpack webpack-cli --save
`在package.json文件里手动配置scripts脚本中: //--watch:时刻监听代码 "dev":"webpack -- mode development --watch", "build":"webpack --mode production" //(dev为开发模式,build为生产模式)`

webpack基础原理
文章图片

  • npm run dev (出现dist文件夹)
    3.入口与出口及单页面与多页面的配置文件(改文件名字)
  • 新建一个文件:webpack.config.js
`里面内容写: //webpack配置文件 // 导出 module.exports={ //配置入口 entry:{ //要写成绝对路径,__dirname指定路径 'index1':__dirname+"/src/main.js", //'index2':_dirname+"/src/main2.js", }// 可以配置多个入口 // 配置出口 output:{ //输出到哪 path:_dirname+"/dist",// 打包后的文件存放的地方 filename:"[name].js",// 打包后输出文件的文件名 // 没有dist文件夹,但生成在内存中 publicPath:"/dist/" //虚拟路径,可以访问到我们生成的文件,公共目录 } }`

【webpack基础原理】4.webpack-dev-server:自动刷新浏览器,热更新
  • 运行cnpm i --save webpack-dev-server
webpack.config.js文件里面写// localhost:8080,反向代理.... devServer:{ contentBase:'./', //根目录地址,相对路径 port:8080, proxy:{}, inline:true // 实时刷新 }然后在packpack.json文件中,在scripts脚本里面添加 "start":"webpack-dev-server --mode development"

5.source-map:映射源代码,方便调试
在webpack.config.js里面写一句: "devtool":"source-map" //映射源代码目录,方便调试

6.loaders配置:加载器,翻译器(ps:loader有很多,只挑一些常见的)
  • css-loader,style-loader(将css文件当成模块处理)
在webpack.config.js添加: module: { rules:[ // loader 规则 { test:/\.css$/, loader:'style-loader!css-loader' // 添加对样式表的处理,内联样式 // loader:'style-loader!css-loader!postcss-loader' //处理css兼容 } ] }安装: cnpm i --save css-loader style-loader

  • scss-loader(scss编译成css文件)(安装node-sass)
在webpack.config.js添加: module: { rules:[ // loader 规则 { test:/\.scss$/, loader:'style-loader!css-loader!sass-loader' // 添加对样式表的处理,内联样式 // loader:'style-loader!css-loader!postcss-loader' } ] }安装: cnpm i --save sass-loader node-sass

  • babel-loader(es6 转换成 es5,react)(安装:babel-loader@7 babel-core babel-preset-es2015)
在webpack.config.js添加: module: { rules:[ // loader 规则 { test:/\.js$/, //随便起的test名字 exclude:/node_modules/, //排除一个 //exclude:/(node_modules|src)/, // 排除多个就这样写 loader:'babel-loader' , query:{ presets:['es2015'] } } ] } 安装: cnpm i --save babel-loader@7 babel-core babel-preset-es2015

  • post-css(处理css兼容性问题)(安装插件:postcss-loader autoprefixer postcss)
安装: cnpm i --save postcss-loader postcss autoprefixer在webpack.config.js添加: module: { rules:[ // loader 规则 { test:/\.css$/, loader:'style-loader!css-loader' // 添加对样式表的处理,内联样式 loader:'style-loader!css-loader!postcss-loader' //处理css兼容 }, { test:/\.scss$/, loader:'style-loader!css-loader!sass-loader' // 添加对样式表的处理,内联样式 loader:'style-loader!css-loader!postcss-loader!sass-loader'//处理css兼容 } ] }创建一个postcss.config.js module.exports = { plugins: [ // 兼到最新的100个浏览器,这样会导致代码体积变大 //require('autoprefixer')('last 100 versions') require('aytoprefixer')( { browsers:[ // 兼容最新浏览器 'last 10 Chrome versions', 'last 5 Firefox versions', 'Safari >= 6', 'ie > 8', 'ios >= 8', 'Android >= 4.4' ] } ) ] }

  • vue-loader(安装:vue-loder vue-template-compiler)对vue解析
在webpack.config.js添加: //webpack配置文件 const {VueLoaderPlugin} = require("vue-loader) module.exports={ rules: [ { // 处理.vue文件的loader test:/\.vue$, use:'vue-loader' } ] }, //vue-loader插件: plugins: [ new VueLoaderPlugin() ]安装: cnpm i --save vue-lodervue-template-compiler

  • file-loader,url-loader(文件copy到目录文件夹)
    (url-loader可以设置图片大小限制,当图片超过限制时,其表现行为等同于file-loader,而当图片不超过限制时,则会将图片以base64的形式打包进css文件,以减少请求次数)

    推荐阅读