webpack安装使用 4.x

众所周知webpack是一款打包项目的打包工具

本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle

安装webpack之前请确保你已安装了node.js

如果没有安装请点击下载安装:官网下载安装地址

webpack四个核心概念:

  1. 入口entry
  2. 出口output
  3. loader
  4. 插件plugins

全局安装webpack

npm install --global webpack
//npm install --global webpack@<version> #指定安装的版本
npm install --global webpack-cli

局部安装webpack

npm install --save-dev webpack
//npm install --save-dev webpack@<version> #指定安装的版本
npm install --save-dev webpack-cli

可使用命令 webpack -v 查看是否安装成功

首先创建一个demo文件夹 名称为webpack-demo

mkdir webpack-demo
cd webpack-demo

生成package.json

npm init -y

创建一个src/index.js目录和文件输入

mkdir src
cd src
touch index.js

index.js

console.log("hello webpack");

运行命令 webpack 你就会看到项目下面多了一个dist/main.js的文件夹 main.js就是你打包后的index.js文件结果,在这里就涉及到webpack打包的默认入口和出口 默认打包入口是src/index.js 默认打包出口是dist/main.js

webpcak 默认打包是生产环境production打包后代码为一行 也可以设置为开发环境development多行代码显示,执行下面命令可切换不同的环境进行打包

webpack --model production //生产环境 压缩后 一行代码显示
webpack --model development //开发环境 未压缩 多行代码显示

 

webpack本身是用来打包js的,但是如果想要打包js,css,html,图片等 就必须配置webpack

loader 让 webpack 能够去处理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)。loader 可以将所有类型的文件转换为 webpack 能够处理的有效模块,然后你就可以利用 webpack 的打包能力,对它们进行处理。

插件plugins 可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。插件接口功能极其强大,可以用来处理各种各样的任务

webpack常用的相关的配置如下:

首先我们得在webpack-demo目录下创建配置文件 webpack.config.js

const path = require('path');

//配置入口和出口的两种方式
module.exports = {
  entry: './src/index.js', // 入口配置
  output: { // 出口配置
    filename: 'main.js',
    path: path.resolve(__dirname, 'dist')
  }
};

启动脚本配置 package.json

{
  "name": "webpack_demo",
  "version": "1.0.0",
  "description": "",
  "private": true,
  "scripts": {
    "prd": "webpack --model production", //生产环境 npm run prd
    "dev": "webpack --model development" //开发环境 npm run dev
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^4.43.0",
    "webpack-cli": "^3.3.11"
  }
}

本地服务器配置 dev-serve

  • 安装
npm install --save-dev webpack-dev-server

安装完成配置webpack.config.js 添加如下配置:

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'main.js',
    path: path.resolve(__dirname, 'dist')
  },
  devServer:{
	  //本地服务路径
	  contentBase:"./dist",
	  //实时刷新
	  inline:true
  }
};

配置启动脚本package.json 新增如下脚本命令

"scripts": {
    "start": "webpack --model production",
    "dev": "webpack --model development",
    "devServe":"webpack-dev-server --open --inline"
},

运行脚本 npm run devServe 打开localhost:8080 就能看到服务指向的地址

在webpack-demo/dist中新建一个index.html,引入main.js代码如下

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <title></title>
    <meta charset="UTF-8">
	<script src="./main.js"></script>
</head>

<body>
    
</body>
<script type="text/javascript">
   
</script>

</html>

刷新浏览器 按F12 点击console 就能看见index.js中打印的数值如下所示,接下来我们的devServe实时刷新页面就配置好了。当你改变index.js文件时保存后webpack会自动帮你打包文件,就不用手动去执行webpack打包命令了

当然devServer还有很多配置,详情请参考官方文档https://www.webpackjs.com/configuration/dev-server/

接下来咱们配置loader 如果需要打包html css 图片等就需要配置loader,webpack默认是只打包js的

在src中新建css文件 目录结构webpack-demo/src/index.css ,添加如下样式

body{
	background: blue
}

接着在index.js文件中引入index.css

import './index.css';
console.log("hello webpack");

当你保存文件时,因为配置了本地服务devServer实时刷新,webpack会自动编译保存的文件。此时浏览器则会报错告诉你index.css文件并不能识别。需要安装loader来处理此文件类型。

当你需要打包什么文件则需要安装什么loader下面附上一张文件类型对应需要安装的loader,下面表来自https://blog.csdn.net/xuelang532777032/article/details/65445604博主

loader安装方法就不在一一举例,请参考官方文档 https://www.webpackjs.com/loaders/ 

约定loader一览表

扩展名语义loader举例
.jsreturns module exportsbabel-loader
.tsreturns module exportsts-loader
.coffeereturns module exportscoffee-loader coffee-redux-loader
.jsxreturns module exports (react component)jsx-loader react-hot-loader!jsx-loader
.json .json5returns json valuejson-loader json5-loader
.txtreturn string valueraw-loader
.cssreturns nothing, side effect of adding style to DOMstyle-loader!css-loader style-loader!css-loader!autoprefixer-loader
.lessreturns nothing, side effect of adding style to DOMstyle-loader!css-loader!less-loader
.scssreturns nothing, side effect of adding style to DOMstyle-loader!css-loader!scss-loader
.stylreturns nothing, side effect of adding style to DOMstyle-loader!css-loader!stylus-loader
.png .jpg .jpeg .gif .svgreturns url to imagefile-loader url-loader
.woff .ttfreturns url to fontfile-loader url-loader
.wav .mp3returns url to audiofile-loader url-loader
.mpeg .mp4 .webm .ogvreturns url to videofile-loader
.htmlreturns HTML as stringhtml-loader
.md .markdownreturns HTML as stringhtml-loader!markdown-loader
.jadereturns template functionjade-loader
.hbs .handlebarsreturns template functionhandlebars-loader

接下来。咱们开始安装css文件需要的loader也就是表所对应的style-loader css-loader

css文件的 loader安装

npm install style-loader css-loader -S

在webpack.config.js配置loader

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'main.js',
    path: path.resolve(__dirname, 'dist')
  },
  devServer:{
	  //本地服务路劲
	  contentBase:"./dist",
	  //实时刷新
	  inline:true
  },
  module: {
    rules: [
      {
		//正则表达式找到.css结尾的文件
        test: /\.css$/, 
        use: [ 'style-loader', 'css-loader' ]
      }
    ]
  }
};

然后重新运行本地服务npm run devServe 打开浏览器 http://localhost:8080,你设置的样式就已经加载出来了。

图片 html等文件打包对照以上表需要安装的的loader去官方文档查找安装配置

下面讲解插件pulgins的配置

安装插件pulgins 这里安装的是HtmlWebpackPlugin插件 需要什么插件可以对应官方文档可以找到插件的安装方法

https://www.webpackjs.com/plugins/html-webpack-plugin/

HtmlWebpackPlugin简化了HTML文件的创建,以便为你的webpack包提供服务。这对于在文件名中包含每次会随着编译而发生变化哈希的 webpack bundle 尤其有用。 你可以让插件为你生成一个HTML文件,使用lodash模板提供你自己的模板,或使用你自己的loader

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

配置webpack.config.js文件

var HtmlWebpackPlugin = require('html-webpack-plugin');
const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'main.js',
    path: path.resolve(__dirname, 'dist')
  },
  devServer:{
	  //本地服务路劲
	  contentBase:"./dist",
	  //实时刷新
	  inline:true
  },
  module: {
    rules: [
      {
		//正则表达式找到.css结尾的文件
        test: /\.css$/, 
        use: [ 'style-loader', 'css-loader' ]
      }
    ]
  },
  plugins: [new HtmlWebpackPlugin({
		//指定html文件
		template:"./src/index.html",
		//打包后的名称
		filename:"a.html",
		//压缩
		minify:{
			removeAttributeQuotes:true,//去除多余的引号
			removeComments:true,//去除注释
			removeEmptyAttributes:true,//去除空属性
			collapseWhitespace:true//去除空格回车
		}
  })]
};

这里只是例举倒了一部分的配置参数,当然配置远远不止这些。还有很多配置详情。请参考官方文档提供的gitdemo;

这里附上HtmlWebpackPlugin插件配置地址: https://github.com/jantimon/html-webpack-plugin#configuration

下面是如何找到其它配置选项方法

开发环境配置:

/**
 * 开发环境配置
 */


const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
 
module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'main.js',
    path: path.resolve(__dirname, 'build')
  },
  // 开发环境配置
  devServer:{
	  // 本地服务路径
      contentBase:path.resolve(__dirname, 'build'),
      // 压缩gzip
      compress:true,
      // 端口号
      port:3000,
	  // 实时刷新
      inline:true,
      // 第一次运行时自动打开浏览器
      open:true,
  },
  module: {
    rules: [
      {
        // 正则表达式找到.css结尾的文件
        test: /\.css$/, 
        use: [ 'style-loader', 'css-loader' ]
      },
      {
        test: /\.less$/,
        use:[
            'style-loader',
            'css-loader',
            'less-loader'
        ]
      },
      {
          // 处理图片资源
          test: /\.(jpg|png|gif)$/,
          loader: 'url-loader',
          options: {
              // 如果图片小于8kb就使用Base64处理图片
              limit: 8*1024,
              name: '[hash:10].[ext]',
              // 关闭es6模块化
              esModule: false,
              // 打包编译后创建一个imgs目录存储图片
              outputPath: 'imgs'
          }
      },
      {
          // 处理html中img资源
          test: /\.html$/,
          loader: 'html-loader'
      },
      {
          // 处理其他资源
          exclude: /\.(html|js|css|less|jpg|png|gif)$/,
          loader: 'file-loader',
          options: {
              name: '[hash:10].ext',
              // 打包编译后创建一个media目录存储其他资源
              outputPath: 'media'
          }
      }
    ]
  },
  plugins: [new HtmlWebpackPlugin({
		//指定html文件
		template:"./src/index.html",
		//打包后的名称
		filename:"a.html",
		//压缩
		minify:{
			removeAttributeQuotes:true,//去除多余的引号
			removeComments:true,//去除注释
			removeEmptyAttributes:true,//去除空属性
			collapseWhitespace:true//去除空格回车
		}
  })]
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值