一、webpack特点:

可以使用webpack-dev-server本地开发,热更新模块化开发(import,require),打包后会干净的。
例如有10个js文件,只用了5个,那么其它文件打包上线时不会发布。
预处理(Less,Sass,ES6等),图片优化、js压缩
css3对低版本浏览器要处理,webpack能够自动处理。
可以按需加载

 

 (这些安装webpack的基本步骤代码)

1.安装webpack到全局
npm install webpack -g
npm install webpack-cli -g
webpack --version 查看版本

2.新建项目
npm init 
npm install webpack -D
npm install webpack-cli -D

3.新建源码目录src

4.新建index.js,以及测试代码

5.打包成main.js
webpack
webpack --mode=development
webpack --mode=production
webpack --mode=none
非index.js,命令
webpack src/index2.js --mode=development
webpack src/index2.js --output dist2/test.js --mode=development
指定打包index2.js 到指定位置dist2

6.http引入

7.安装http-server
npm install http-server -g
http-server dist 生成http路径
http-server dist -p 9000 -o 自定义生成路径名  (http一般很少用这里知道就行)

 

webpack目录:

 

 

          

                                    webpack开发模式与生产模式以及个插件

{
  "name": "web02",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "cross-env NODE_ENV=development webpack-dev-server --mode development --inline --progress --config build/webpack.conf.js",
  //这里是cmd开发模式的总写法   cmd编译npm run start 编译webpack.conf.js文件 打开html 热更新
    "build": "cross-env NODE_ENV=production webpack --config build/webpack.conf.js --mode production"
  //这里是生产模式的总写法  cmd编译npm run build 在dist目录下生成html 以及编译的js、css等文件 
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "clean-webpack-plugin": "^3.0.0",
    "cross-env": "^6.0.3",
    "css-loader": "^3.2.0",
    "file-loader": "^5.0.2",
    "mini-css-extract-plugin": "^0.8.0",
    "node-sass": "^4.13.0",
    "sass-loader": "^8.0.0",
    "style-loader": "^1.0.0",
    "url-loader": "^2.3.0",
    "webpack": "^4.41.2",
    "webpack-cli": "^3.3.10",
    "webpack-dev-server": "^3.9.0"
  },
  "dependencies": {
    "html-webpack-plugin": "^3.2.0",
    "jquery": "^3.4.1",
    "vue": "^2.6.10"
  }
}

 

var webpack = require('webpack');
var htmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');//将CSS提取为独立的文件的插件,对每个包含css的js文件都会创建一个CSS文件
//var {CleanWebpackPlugin} = require('clean-webpack-plugin');//这里的删除插件前面要这样写
var path = require('path');//这是nodejs的核心模块之一
var srcPath = path.resolve(__dirname,'../src');
var distPath = path.resolve(__dirname,'../dist');
//var rootPath = path.resolve(__dirname,'..');
//console.log('root'+rootPath);

//是否开发者模式(true-->>开发模式 false-->>产品模式)
const devMode = process.env.NODE_ENV !== 'production';
console.log(devMode);//判断是开发模式还是产品模式真假
console.log(process.env.NODE_ENV);

module.exports = {
   entry:SRC_FILE,//入口js文件,注意相对于build目录
	//entry:{  
		index:path.resolve(__dirname,'../src/index.js'),
		index2:path.resolve(__dirname,'../src/index2.js'),
	},//也可以打包编译多个js文件 html会同时引用这些js
	output:{  //输出,出口文件
		path:distPath,
		filename:'[name].js'
	},
	module:{//加载转换文件为模块 webpack只打包编译模块、js
		rules:[
			{
				test:/\.sass$/,
				use:[
					devMode ? 'style-loader' : MiniCssExtractPlugin.loader,//如果是开发模式则使用style 否则创建一个css文件。
					'css-loader',//加载程序来处理css文件 css-loader一定要放在style后面
					'sass-loader'//这里的sass-loader一定要放css后面
				]
			},
			{
				test:/\.css$/,
				use:[
					devMode ? 'style-loader' : MiniCssExtractPlugin.loader,//如果是开发模式则使用style 否则创建一个css文件。
					'css-loader'//加载程序来处理css文件 css-loader一定要放在style后面
				]
			},
		    {
				 test: /\.(png|svg|jpg|gif)$/,
				 loader: 'file-loader',
				 options: {
					name: './images/[name].[hash].[ext]'//图片编译后位置及名字 但要用file
				}
		    },
			{
				test : /\.(mp3|mp4)(\?.*)?$/,
				loader: 'file-loader',
				options: {
				  name : './assets/[name].[ext]'//mp3不能用hash html只会用源码的文件名
				}
			}
		]
	},
	devServer:{//开发服务器
		hot:true,//热更新
		inline:true,
		open:true,//是否自动打开默认浏览器
		contentBase:distPath,//发布目录
		port:7788,//控制端口
		host:'0.0.0.0',//host地址
		historyApiFallback:true,
		useLocalIp:true,//是否用自己的IP
		proxy:{
			'/action':'http://127.0.0.1:8080/'
		}
	},
	plugins:[//插件,自动生成html 参数用来配置html名
        new htmlWebpackPlugin({
			template:'src/index.html',
			filename:'index.html',
			inject:true //inject: head  引用js位置 如果type在head头部会引用不到vue.js
			//hash: true
		}),
		//new CleanWebpackPlugin()//自动删除webpack里的dist目录 没很大用处
		new MiniCssExtractPlugin({
			filename: devMode ? '[name].css' : '[name].[hash].css',//如果是生产模式则使用hash文件名
			chunkFilename: devMode ? '[id].css' : '[id].[hash].css'
		})
	]
}

 

src目录:

 

 

 

示例代码:

 

const $ = require('jquery'); //这里直接拿到jquery 命名为$ 前提是要下载jquery配置
$(function(){
	$('#app').text(123);
});

 

import {tt} from './test.js';
import './index.css';//因为css文件已经转换为moudel模块 所以 不是在html里面引用css文件
import './style.sass';
import Vue from 'vue/dist/vue.js';

import p1 from './images/1.jpg';
import './assets/mp3_1.mp3';
import './assets/mp4_1.mp4';
console.log(p1);
tt();

  

html{ 
	background: url("./images/1.jpg");
}

 

(这里还没有添加vue组件模板来开发前端组合开发,不过基本的webpack插件、热更新以及开发模式和生产模式都齐全)

===》》  webpack vue开发:

"vue-loader": "^15.7.2",
"vue-style-loader": "^4.1.2",
"vue-template-compiler": "^2.6.10",

 

posted on 2020-02-04 16:43  这杀手不太冷  阅读(602)  评论(0编辑  收藏  举报