什么是webpack?
五个核心概念:
对loader的理解
对plugins的理解
配置文件
{
"name": "webpack_test",
"version" : "1.0.0"
}
创建文件
创建主页面
运行指令
打包指令(开发)∶
webpack ./src/js/app.js -o ./build/js/app.js --mode=development
打包指令(生产):
webpack ./src/js/app.js -o ./build/js/app.js --mode=production
index.html页面中引入: build/js/app.js
结论:
缺点:
改善:使用webpack配置文件解决,自定义功能
首先,安装webpack4.0版本:npm install webpack@4 webpack-cli@3 -g
。
分别使用commonJs和ES6模块化语法编写js代码
//
const data = 'atguigu'
const msg = 'hello'module.exports = {showData (){console.log(data);},showMsg(){console.log(msg);}
}//
export const teacher1 = {name:'强哥',age:15}
export const teacher2 = {name:'歌神',age:17}//使用【统一暴露】
const stu1 = {name:'王宇',age:18}
const stu2 = {name:'宇航',age:19}
export {stu1,stu2}
export {stu1 as stu11,stu2 as stu22}//使用【默认暴露】
export default {school:'尚硅谷',address:'宏福科技园',subjects:['前端','java','大数据']
}//
// 使用commonJs语法
const m1 = require('./module1') //引入自定义模块
m1.showData()
m1.showMsg()// 使用es6语法
import m2,{teacher1,teacher2,stu1,stu2,stu11,stu22} from './module2'
console.log(m2);
console.log(teacher1);
console.log(teacher2);
console.log(stu1);
console.log(stu2);
运行命令:webpack ./src/js/app.js -o ./build/js/app.js --mode=development
index.html
引入打包后的js
Document
//
const data = 'atguigu'
const msg = 'hello'module.exports = {showData (){console.log(data);},showMsg(){console.log(msg);}
}//
export const teacher1 = {name:'强哥',age:15}
export const teacher2 = {name:'歌神',age:17}//使用【统一暴露】
const stu1 = {name:'王宇',age:18}
const stu2 = {name:'宇航',age:19}
export {stu1,stu2}
export {stu1 as stu11,stu2 as stu22}//使用【默认暴露】
export default {school:'尚硅谷',address:'宏福科技园',subjects:['前端','java','大数据']
}//
{"name":"老刘","age":18
}// // app.js是webpack的入口,所有外部文件(js、json、css、less等等)都需要在这里引入使用(注意是所有外部文件,包括图片、样式、json文件、js等)// 使用commonJs语法
const m1 = require('./module1') //引入自定义模块
m1.showData()
m1.showMsg()// 使用es6语法
import m2,{teacher1,teacher2,stu1,stu2,stu11,stu22} from './module2'
console.log(m2);
console.log(teacher1);
console.log(teacher2);
console.log(stu1);
console.log(stu2); // 在es6的模块化语法中,引入一个json文件(它默认会以default的方式暴露,所以如下引入)
import jsonData = '../json/test.json'//
Document
//
const data = 'atguigu'
const msg = 'hello'module.exports = {showData (){console.log(data);},showMsg(){console.log(msg);}
}//
export const teacher1 = {name:'强哥',age:15}
export const teacher2 = {name:'歌神',age:17}//使用【统一暴露】
const stu1 = {name:'王宇',age:18}
const stu2 = {name:'宇航',age:19}
export {stu1,stu2}
export {stu1 as stu11,stu2 as stu22}//使用【默认暴露】
export default {school:'尚硅谷',address:'宏福科技园',subjects:['前端','java','大数据']
}//
{"name":"老刘","age":18
}//
.title {background-color: #bfa;color: red;
}// // app.js是webpack的入口,所有外部文件(js、json、css、less等等)都需要在这里引入使用(注意是所有外部文件,包括图片、样式、json文件、js等)// 使用commonJs语法
const m1 = require('./module1') //引入自定义模块
m1.showData()
m1.showMsg()// 使用es6语法
import m2,{teacher1,teacher2,stu1,stu2,stu11,stu22} from './module2'
console.log(m2);
console.log(teacher1);
console.log(teacher2);
console.log(stu1);
console.log(stu2); // 在es6的模块化语法中,引入一个json文件(它默认会以default的方式暴露,所以如下引入)
import jsonData = '../json/test.json'// 引入css(这是es6模块化语法中规定的)
import '../css/demo.css'
发现webpack并不能处理css这种文件类型,需要引入loader
在src同级目录下,创建webpack.config.js(webpack默认会读取该名字的文件作为配置文件)
/*1.该文件是webpack的配置文件,所有webpack的任务、用到的loader、plugins都要配置在这里2.该文件要符合CJs模块化规范(因为webpack是基于node的)
*/
//引入Node中一个内置的path模块,专门用于解决路径问题
var path = require('path');
//使用CJS的模块化规范,暴露一个对象,该对象就是webpack的详细配置对象(规则)
module.exports = {mode: 'development',//工作模式entry: './src/js/app.js',//入口output: { //出口(输出)path: path.resolve(__dirname, 'build'), //输出文件的路径filename: 'app.js'//输出文件的名字}
}
5.打包less、css资源
6.打包html文件
7.打包样式中的图片
8.打包html中的图片
9.打包其他资源
10.devServer
生产环境准备:
1.提取css为单独文件
2.css兼容性处理
3. js语法检查
4. 4.js语法转换
5. 5.js兼容性处理
6. 6.压缩html、压缩js