WebPack


一、webpack 常用命令 

  • 查看webpack版本信息:npm info webpack versions

  • 全局安装:npm install webpack webpack-cli -g
  • 全局安装指定版本:npm install webpack@4.16.5 webpack-cli -g
  • 卸载全局安装:npm uninstall webpack webpack-cli -g
  • 查看版本:webpack -v (node.js会在全局的模块目录中去找这个命令,没有安装会找不到这个命令的)

  • 项目内安装:npm install webpack webpack-cli --save-dev(--save-dev可以等价为-D
  • 查看项目内webpack版本:npx webpack -v
  • npm install webpack --save
  • 使用项目webpack打包js文件:npx webpack Xxx.js
  • 使用全局的webpack打包js文件:webpack Xxx.js
  • node -v
  • npm -v
  •  初始化npm:npm init -y
  • 安装项目依赖包:npm install

注:webpack-cli 能让我们在控制台运行 webpack 命令的,但是按照webpack这个的时候webpack-cli回跟着安装的不用显示的安装


二、 webpack 配置文件

 index.js

var Header = require('./header.js');
var Sidebar = require('./sidebar.js');
var Content = require('./content.js');

new Header();
new Sidebar();
new Content();

 header.js

function Header() {
	var dom = document.getElementById('root');
	var header = document.createElement('div');
	header.innerText = 'header';
	dom.append(header);
}

module.exports = Header;

 content.js

function Content() {
	var dom = document.getElementById('root');
	var content = document.createElement('div');
	content.innerText = 'content';
	dom.append(content);
}

module.exports = Content;

 sidebar.js

function Sidebar() {
	var dom = document.getElementById('root');
	var sidebar = document.createElement('div');
	sidebar.innerText = 'sidebar';
	dom.append(sidebar);
}

module.exports = Sidebar;

 index.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>这是最原始的网页开发</title>
</head>
<body>
	<p>这是我们的网页内容</p>
	<div id='root'></div>
	<script src='./bundle.js'></script>
</body>
</html>

当我们使用  npx webpack Xxx.js 执行打包命令的时候,似乎没有看见配置文件的影子,其实这个时候使用的是webpack的默认配置

默认的配置文件:webpack.config.js

const path = require('path');
// 配置
module.exports = {
	// 1. 项目重那个文件开始打包
	entry: './src/index.js',
	// 2. 打包文件放到哪里
	output: {
		// 3. 打包好的文件的名字
		filename: 'bundle.js',
		// 4. 打包出的文件放在哪个文件夹下 path要是绝对路径
		// __dirname就是webpack.config.js的绝对路径,和dist结合
        // 不写效果一样,默认就是
		path: path.resolve(__dirname, 'dist')
		// 绝对路径
		// path: path.resolve('F:/Test/GitTest2/')
	}
}

 手动指定配置文件: npx webpack --config Xxx.js

使用 npm scripts 简化配置

 在 package.json 里面有一个scripts属性,这个数据是配置执行脚本的

{
  "name": "lesson",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "bundle": "webpack"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack-cli": "^3.1.2"
  },
  "dependencies": {
    "webpack": "^4.25.1"
  }
}

scripts 配置的 webpack 首先会在当前项目中找 webpack,然后才去全局找所以 webpack 前面不需要加 npx, 我配置了webpack.config.js后面就不需要打包的js入口文件了

现在我们执行打包命名:npm run bundle (npx webpack Xxx.js)

  • npm run bundle -> webpack

打包输出类容 

PS F:\Procedure\Html\webpack\01-04\lesson> npx webpack
Hash: 1b24ce275a9479386bf2
Version: webpack 4.25.1
Time: 114ms
Built at: 2019-07-11 7:53:18 PM
    Asset      Size  Chunks             Chunk Names
bundle.js  1.36 KiB       0  [emitted]  main
Entrypoint main = bundle.js
[0] ./src/index.js 159 bytes {0} [built]
[1] ./src/header.js 187 bytes {0} [built]
[2] ./src/sidebar.js 193 bytes {0} [built]
[3] ./src/content.js 193 bytes {0} [built]

 Chunk Names 输出main,就是entry里面的

const path = require('path');
module.exports = {
	entry:{
		main:'./src/index.js',
	},
	output: {
		filename: 'bundle.js',
		path: path.resolve(__dirname, 'dist')
	}
}
WARNING in configuration
The 'mode' option has not been set, webpack will fallback to 'production' for this value. Set
'mode' option to 'development' or 'production' to enable defaults for each environment.
You can also set it to 'none' to disable any default behavior. Learn more: https://webpack.js.org/concepts/mode/
const path = require('path');
module.exports = {
	// 不配置这个会有警告,但是它会给我们设置成这个
	// production 打包出的文件会被压缩
	// development 不压缩
	mode:'production',
	entry:{
		main:'./src/index.js',
	},
	output: {
		filename: 'bundle.js',
		path: path.resolve(__dirname, 'dist')
	}
}

 


三、 使用WebPack打包其他文件

file-loader

打包图片

webpack.config.js

const path = require('path');

module.exports = {
	mode: 'development',
	entry: {
		main: './src/index.js'
	},
	// webpack默认知道如何处理js模块,但是不知道jpg这种文件怎么打包
	// 我们这里需要配置
	module: {
		// 可以定义多个规则
		rules: [{
			// 正则匹配 jpg png gif文件
			test: /\.(jpg|png|gif)$/,
			use: {
				// 定义一个loader 需要手动安装 file-loader (npm install file-loader -D)
				loader: 'file-loader',
				// 配置参数
				options:{
					// 打包的图片和原图片一模一样(名字后缀)
					// placeholder 占位符  https://webpack.js.org/loaders/file-loader/
					name:'[name].[ext]',
					// 可以指定图片打包的位置(不然在dist目录里面)
					outputPath:'images/'
				}
			} 
		}]
	},
	output: {
		filename: 'bundle.js',
		path: path.resolve(__dirname, 'dist')
	}
}

 index.js

import avatar from './avatar.jpg';
console.log(avatar);

var img = new Image();
img.src = avatar;

var root = document.getElementById('root');
root.append(img);

index.html 

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<div id='root'></div>
	<script src='./bundle.js'></script>
</body>
</html>
  • npm install  file-loader  -D 
  •  npx webpack

url-loader

当一个图片文件大于我们配置的值的时候,url-loader 和 file-loader 的效果是一模一样的

如果图片小于我们设置的值, url-loader 不会打包图片,他会把图片转成base64

const path = require('path');

module.exports = {
	mode: 'development',
	entry: {
		main: './src/index.js'
	},
	module: {
		rules: [{
			test: /\.(jpg|png|gif)$/,
			use: {
				// 图片转换成 base64
				// 适合小图片
				loader: 'url-loader',
				options: {
					// name: '[name]_[hash].[ext]',
					outputPath: 'images/',
					// 设置图片大小,是转base64还是打包到文件
					// 小于这个值都会转base64,当图片大于这个值这个时候url-loader和file-loader是一样的
					// kb
					limit: 1024000
				}
			} 
		}]
	},
	output: {
		filename: 'bundle.js',
		path: path.resolve(__dirname, 'dist')
	}
}
{
  "name": "lesson",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "bundle": "webpack"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "file-loader": "^2.0.0",
    "url-loader": "^2.0.1",
    "webpack-cli": "^3.1.2"
  },
  "dependencies": {
    "webpack": "^4.25.1"
  }
}

 

  • npm install --save-dev url-loader  

或者

  • npm install  url-loader  -D

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值