webpack 配置 - 开发环境

news/2024/7/19 14:19:50 标签: webpack, javascript, js

webpack打包工具

概念

.vue .sass .less等很多文件浏览器识别不了,就需要编译打包成js文件

 

五大核心

入口(entry),输出(output),loader,插件(plugins),模式(Mode)

 

使用

打包时会从入手文件开始,找相互依赖的文件

全局安装 npm install webpack webpack-cli -g

当前目录下安装 npm install webpack webpack-cli --save-dev

 

基础打包

需要入口文件,-o 指定输出文件,开发模式

开发:webpack ./src/index.js -o ./dist/bundle.js --mode=development

生产:webpack ./src/index.js -o ./dist/bundle.js --mode=production(压缩跟混淆)

webpack默认可以处理jsjson文件

生产环境下比开发环境多了一个代码的压缩跟混淆

 

webpack.config.js - 配置文件

打包指令直接输入:webpack

当前文件所在目录:path.resolve(_dirname)

entry:打包的入口文件

output:输出的文件名称和路径

loader:对某种格式文件转换成js,配置放在module里,通过在rules里匹配类型文件

plugins:配置插件 mode: 模式 development/ production

 

打包样式资源

需要配置loader 安装依赖:npm install style-loader css-loader --save-dev

css-loader: 将css文件转换为js

style-loader:将js的样式内容插入到style标签内

use数组里的loader执行顺序,是从下到上,所有先写 style-loader 再写 css-loader

 

打包图片资源

需要配置loader

安装依赖:npm install url-loader file-loader html-loader --save-dev

url-loader和file-loader:打包css 图片(url-loader依赖file-loader)

html-loader:打包html文件的img图片(负责引入img,从而被url-loader进行处理)

配置项

limit为8*1024:当图片小于8kb,使用base64处理,减少请求数量,但是会使体积更大 ​

  • 图片的base64编码,是随着html下载时把图片数据转成一串字符串下载到本地,不用再向服务器发送请求(优化点!)

esModule为false :因为url-loader默认使用es6模块化解析而html-loader引入图片是commonJS,解析时会出现问题:[object Module]

name为'[hash:10].[ext]' :图片名称是一个hash值,hash:10取hash的前10位,[ext]取图片的扩展名

 

打包html资源

需要配置plugins插件

安装依赖:npm install html-webpack-plugin --save-dev

new HtmlWebpackPlugin() 功能:默认会创建一个空的html,自动引入打包输出的所有资源(js/css)

new HtmlWebpackPlugin({ template: './src/index.html' }) 复制 './src/index.html' 文件,并自动引入打包输出的所有资源

 

打包其他资源(除了html/js/css资源以外的资源)

需要用到exclude,配置 file-loader

 

开发服务器 devServer

用来自动化(自动编译,自动打开浏览器,自动刷新浏览器),简称热更新

特点:只会在内存中编译打包,不会有任何输出

依赖:npm install webpack-dev-server -g

打包指令直接输入:webpack-dev-server

配置项

contentBase: path.resolve(_dirname,'build') - 项目构建路径是build不是src

compress: true - 启动gzip压缩,使浏览器更快的加载和打开

post: 3000 - 服务器端口号

open: true - 自动打开浏览器

 

输出到指定目录

css最后会打包到js里,指定目录打包只能针对js,图片和其他资源

需要在options 里设置 outputPath 属性为打包后的文件名,打包后的文件就会在该文件名下

 

开发环境的基本配置

let path = require('path')
let HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
  // 入口文件
  entry: "./src/index.js",
  output: {
     // 输出的文件名称
     filename:"bundle.js",
     // 输入路径,绝对路径
     path: path.resolve(_dirname,'build')
  },
  mode: 'development',
  // loader的配置
  module:{
      // 对某个格式文件进行转化处理,规则:正则匹配文件
      rules:[
          {
          	test: /\.less$/, // 处理less资源
          	use:[
            	// use数组里的loader执行顺序,是从下到上
          		"style-loader", //将js的样式内容插入到style标签内
          		"css-loader" // 将css文件转换为js
                "less-loader"
      	  	]
          },
          {
          	test: /\.css$/, // 处理css资源
          	use:[
            	// use数组里的loader执行顺序,是从下到上
          		"style-loader", //将js的样式内容插入到style标签内
          		"css-loader" // 将css文件转换为js
      	  	]
          },
          // 匹配图片文件
          {
              test: /\.(jpg|png|gif)$/,
              // 图片小于8kb,使用base64处理,减少请求数量,但是会使体积更大
              loader: 'url-loader',
              options: {
                  limit:8*1024, // 8kb
                  esModule:false, // 关闭url-loader的es6模板化解析,会与html-loader有冲突
                  name: '[hash:10].[ext]' //[hash:10]取hash的前10位,[ext]取图片的扩展名
              }
          },
          // html通过img使用图片
          {
              test: /\.html$/,
              loader:'html-loader'
          },
          {
          
              exclude: /\.(html|css|js)$/, //排除css/js/html资源
              loader:'file-loader',
              outputPath: '文件名' // 如果需要输出在指定目录下
          }
      ]
  },
  plugins:[
      new HtmlWebpackPlugin({
          // 将打包后的js跟html整合在一起
          template: "./src/index.html"
      })
  ],
  devServer:{
      contentBase:path.resolve(_dirname,'dist'), // 项目构建路径
      compress: true,//启动gzip压缩,使浏览器更快的加载和打开
      post:3000, // 服务器端口号
      open: true, //自动打开浏览器
  }
}

 


http://www.niftyadmin.cn/n/1319161.html

相关文章

K-nearest Neighbors 算法

机器学习初学者,超级小白,不对的地方尽请批评指正。欢迎一起探讨。 K-nearest Neighbors 学习方法是基于实例的,可用于逼近实值或离散目标函数,概念简明。对于基于实例的算法,学习过程只是简单地存储已知的训练数据&am…

Jdbc方式连接Sybase数据库入门

采用的是第三方的jtds-1.2.5.jar驱动,如下:public class JdbcConnSybase {public static void main(String[] args) {Connection conn null;Statement stmt null;ResultSet rs null;try {// Class.forName("com.sybase.jdbc3.jdbc.SybDriver&quo…

webpack配置 - 生产环境

开发环境的配置可以看另外一个篇文章,这篇写的是生产环境的配置 提取css成单独文件 由于css最后是打包到js中,会造成js体积过大,所以要单独提取出来 依赖:npm install mini-css-extract-plugin -D 需要配置plugins 和loader …

事件流

import flash.display.Sprite; import flash.display.DisplayObject; //事件流用于描述事件发生在显示列表中,可分为三个阶段: //捕获阶段(capture phase):从顶部(如stage)到目标 //目标阶段(target phase):目标 //冒泡阶段(bubbling phase):从目标到顶部…

通过设置rowcount,从Sybase数据库中分页取数

虽然听说Sybase12.5.3版本以上的已经支持top查询了,但现在还是有很多系统用的是比较老的Sybase数据库,这些版本的Sybase数据库不支持取前N条的查询语句。如Oracle的rownum,sql server的top,mysql的limit,db2与Derby的F…

Oracle\MS SQL Server Update多表关联更新

一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新。而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据。我们先来讨论根据其他表数据更新你要更新的表 一、MS SQL Server 多表关联更新 sql server提供了upd…

Invalid prop `children` of type `array` supplied to `Overlay`

最近在使用react-native-element 的Overlay 组件时有个报错&#xff1a; Invalid prop children of type array supplied to Overlay 原因是 Overlay 下要有一个父盒子包裹着 <Overlay <SafeAreaView style{{flex: 1}}>......</SafeAreaView> </Overlay&g…

一种Java调用Sybase存储过程实现取前N条数据的方法

一.在Sybase中创建存储过程如下&#xff1a;drop procedure getPageWiseData gocreate procedure getPageWiseData ( sqlStr varchar(8000), start int, limit int ) as DECLARE dt varchar(10) --生成临时表的随机数 BEGIN --# variable to hold the first…