webpack

webpack前端工程化的具体解决方案

功能:前端模块化开发,代码压缩,处理浏览器端js的兼容 ,性能优化

基本使用:

0|1安装

npm i webpack@5.42.1 webpack-cli@4.7.2 -D

-S   是--save  开发上线都要使用   安装到package.js里的dependencies

-D   是--save-dev  开发使用   安装到package.js里的devDependencies

0|2创建

在根目录下创建webpack.config.js文件
// 使用node.js中的导出语法,向外导出一个webpack的配置对象
module.exports = {
//mode用来指定构造模式  可选development(开发模式) production(上线模式)
  mode:'development'
 
}
 
development(开发模式):时间快,体积大
production(上线模式):时间慢,体积小

//在package.json的script节点下,新增dev脚本
运行 npm run dev
在npm run dev时候先去读取webpack.config.js文件.然后再去执行webpack
如果要压缩的话上面的两项直接选择上线模式

0|3webpack中的打包默认约定

在4.x和5.x中默认约定:
打包入口文件:src->index.js
输出文件路径:dist->main.js
修改打包入口文件,直接去webpack的配置文件里:
const path=require('path')
 
module.exports = {
  mode:'development',
                                                                         //  entry:'指定要处理哪个文件'
  entry: path.join(__dirname, './src/index1.js'),
                                                                         // output:'输出文件存放路径'
  output: {
    path: path.join(__dirname, 'ssss'),
    filename:'bundle.js'
  }
}
path.join()是拼接路径
__dirname正在执行的文件的目录的绝对路径 

1|0wabpack插件

webpack-dev-server  会启动一个实时打包的http服务器

安装

 cnpm i webpack-dev-server@3.11.2 -D
配置
 
 然后重新打包npm run dev
 html里的引用
  <!-- 加载和引用内存里的js -->
  <script src="/main.js"></script>

1|1html-webpack-pluagin  插件

 将index.html文件复制一份直接放到内存里

 //0.安装

npm i html-webpack-plugin@5.3.2 -D

// 1.导入HTML插件,得到一个构造函数
const HtmlPlugin = require('html-webpack-plugin')

//2.创建HTML插件的实例对象
const htmlPlugin = new HtmlPlugin({
  template: './src/index.html',//指定源文件的存放路径
  filename:'./index.html',//指定生成文件的存放路径
})

module.exports = {
  mode: 'development',
  plugins: [htmlPlugin],//3.通过plugins节点,使htmlPlugin插件生效
}

 它还可以在内存里自动添加js文件

 


 devServer的配置

module.exports = {
  mode: 'development',
  plugins: [htmlPlugin],//通过plugins节点,使htmlPlugin插件生效
     //配置服务器
  devServer: {
    open: true,//初次打包完成后,自动打开默认浏览器
    //在http的协议中如果端口号80,则可以被省略
    port: 80,//配置端口号
    host:'127.0.0.1',//指定运行的地址
  }
}  

1|2loader

1.webpack只能处理打包.js后缀的文件,处理不了其他后缀的文件
2.当代码中有index.css文件,无法处理
3.当webpack发现某个文件处理不了的时候,会查找webpack.config.js文件,
module.rules数组中,是否配置了对应的loader加载器
4.webpack把index.css文件,先转交给最后一个loader处理(css-loader)
5.css-loader处理完后,会把结果给下一个loader(style-loader)
6.当style-loader处理完了,没有loader文件了,就把结果交给webpack
7.webpack会把结果进行打包合并
安装

cnpm i style-loader@3.0.0 css-loader@5.2.6 -D

配置:

 module: {
    rules: [
      //定义了不同模块对应的loader
      { test: /\.css$/, use: ['style-loader','css-loader']}
    ]
  }   

1|3打包处理less

安装:

npm i less-loader@10.0.1 less@4.1.1 -D

配置:

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

1|4base64图片

img 标签是先拿标签,在去请求地址

优点:不用加载两次,

缺点:图片增大(不适合大图片,只适合小图片)

安装:

cnpm i url-loader@4.1.1 file-loader@6.2.0 -D

配置:

  // 处理图片文件base64字符串
      {
        test: /\.jpg|png|gif$/, use: 'url-loader?                                                                         limit=3000&outputPath=images'
      }

limit是控制图片转换base64大小的,如果大于这个值就不转换,小于就转换   

outputPath   是打包后的文件存放地址     


1|5js高级语法打包

安装:

cnpm i babel-loader@8.2.2 @babel/core@7.14.6 @babel/plugin-proposal-decorators@7.14.5 -D

 

配置:

 {
        test: /\.js$/, use: 'babel-loader',exclude:/node_modules/
    }   
exclude:是不包括
   // 使用babel-loader处理高级的JS语法
      // 在配置babel的时候,程序员值需要把自己的代码进行转换即可,一定要排除node_modules目录中的第三方包
      //因为第三方包中的js兼容性,不需要程序员关心
 

然后创建一个babel.config.js文件  里面的配置项为: 

module.exports = {
  plugins: [['@babel/plugin-proposal-decorators'],{legacy:true}]
}   

1|6打包发布

在package.js文件中添加build配置:

"scripts": {
    "dev": "webpack serve ", //serve是在内存上
    "build": "webpack --mode production"  //在物理磁盘上
  },

--mode优先级高,prodction是生产模式


1|7 每次打包自动清理以前的文件

clean-webpack-plugin包


1|8给文件配置别名

resolve: {//解析
  alias: {//别名
    '@':path.join(__dirname,'./src/')
  }
}

 

 

 



__EOF__

本文作者长安
本文链接https://www.cnblogs.com/jingxin01/p/16436141.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   长安·念  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示