定义
自动化构建工具:
webpack:模块化打包工具
gulp:文件转移、文件压缩。。。
前端工程(前端项目)
中文:https://doc.webpack-china.org/
官网:https://webpack.github.io/
一 webpack的四个核心:入口、出口、loader(预加载)、插件
入口:定义入口文件
出口:在项目当中真正使用的文件
loader: 能够去处理那些非 JavaScript 文件(webpack 自身只理解 javascript)。loader 可以将所有类型的文件转换为 webpack 能够处理的有效模块,然后你就可以利用 webpack 的打包能力,对它们进行处理。
插件:通过第三方插件可以可以扩展构建项目的功能
二 使用webpack
ps:webpack是基于node.js的,所以如果你要使用webpack的话,必须先安装node.js
如果要让node完全能够解析es6的语法,必须要安装node的8.5.0及以上的版本
1.先安装node.js,在项目文件夹里通过shift+鼠标右键,点击此处打开命令窗口,执行后续操作。
2 初始化package.json配置文件,记录了当前项目的一些信息
cnpm init
或者 yarn init
人家拿到我的配置文件,就可以通过cnpm install(yarn add/npm install) 直接安装配置文件里面所记录的所有依赖
3 把webpack放置到项目依赖当中
普通依赖:咱们项目当中所使用到的一些框架或者插件 cnpm install vue –save yarn add vue
开发依赖:只使用在项目开发工程当中 cnpm install webpack –save-dev yarn add webpack –dev
安装webpack
npm install webpack
cnpm install webpack
yarn add webpack
ps:全局安装 npm -g /yarn global
ps:一旦在项目当中一开始使用了某种包管理工具,那么在项目的整个过程当中最好使用这种包管理工具
使用yarn:https://yarnpkg.com/zh-Hans/
使用cnpm:https://riny.net/2014/cnpm/
webpack -v:用来检测webpack有没有安装成功
yarn -v:…
cls:清屏
4 初始化一个项目结构
dist:放置发布的文件
src:开发所用的文件
|——assets 用来放置我们需要静态资源
|——入口文件
webpack.config.js 编写webpack的配置文件
index.html 客户端的入口文件
5 开始编写webpack的配置文件
module.exports:导出
require(‘文件路径’):导入
在node的执行环境当中,要用”./”来表示同级关系
执行webpack命令,产生一个出口文件(bundle.js)
module.exports={
//用来规定入口文件
entry:'./src/entry.js',
//用来规定出口文件
output:{
filename:'bundle.js',//定义出口文件的名字
//__dirname:返回当前文件所在的文件目录,
//在文件操作当中,所有的路径都必须使用绝对路径(物理路径)
path:__dirname+'/dist/' //规定出口文件的放置目录
}
}
6 loader的使用
loader:loader让webpack能够去处理那些非javascript文件(webpack 自身只理解 javascript)。
比如:让所有浏览器能够识别ES6的语法(babel-loader)
“babel-core”:使用babel的一些特殊编码去处理ES6的文件
“babel-loader”:加载ES6的js文件
“babel-preset-env”:预设一个编译环境,根据当前开发环境来进行编译
cnpm install babel-core babel-loader babel-preset-env –save-dev:表示同时下载多个文件
module:{
//rules里面就是用来配置loader
rules:[
{
//用来规定编译的文件
test:/\.js$/,
//用来规定使用什么loader来进行编译
use:[
{
loader:'babel-loader',
options:{
//env表示是以当前浏览器的环境支持情况来解析成浏览器能识别的es标准
presets: ['env']
}
}
],
exclude:/(node_modules)/
},
]
}
7 webpack的相关命令
webpack 执行webpack.config.js文件
webpack -p:把相关出口文件压缩代码进行压缩
webpack -w:监听入口文件是否发生变化,一旦发生变化就可以映射到出口文件
8 浏览器同步刷新
安装 webpack-dev-server
1) 通过输入webpack-dev-server运行
2 )直接package.json里面进行配置
“scripts”: {
“dev”:”webpack-dev-server –port 8090”
},
3 )直接package.json里面进行配置,但是相关的其他配置放置在webpack.config.js
通过cnpm/npm run dev
通过yarn dev
webpack.config.js代码详细
//module.exports:node导出文件的一种规范
//require('路径'):node导入文件的一种规范
//commonJS模块化的规范
//export default:ES6导出文件的一种规范
//import 变量名 from '路径':ES6导入文件的一种规范
//这里的路径推荐大家使用绝对路径
const ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports={
//用来规定入口文件
entry:'./src/entry.js',
//用来规定出口文件
output:{
filename:'bundle.js',//定义出口文件的名字
//__dirname:返回当前文件所在的文件目录,
//在文件操作当中,所有的路径都必须使用绝对路径(物理路径)
path:__dirname+'/dist/' //规定出口文件的放置目录
},
devServer:{
port:8088
},
module:{
//rules里面就是用来配置loader
rules:[
{
//用来规定编译的文件
test:/\.js$/,
//用来规定使用什么loader来进行编译
use:[
{
loader:'babel-loader',
options:{
//env表示是以当前浏览器的环境支持情况来解析成浏览器能识别的es标准
presets: ['env']
}
}
],
exclude:/(node_modules)/
},
//配置css的loader
//1 style-loader :通过植入式的方式嵌入到html页面当中
//2 css-loader :用来实现加载css文件的
{
test:/\.css$/,
use:ExtractTextPlugin.extract({
fallback:'style-loader',
use: 'css-loader'
})
},
//如果要模块加载图片,需要用file-loader
{
test:/\.(jpg|png|gif|svg)$/,
use:[
{
loader:'file-loader',
options:{
name:'[name].[ext]',
outputPath:'images/'
}
}
]
}
]
},
//是用来配置插件的选项
plugins:[
new ExtractTextPlugin({
filename:'./css/[name].css'
})
]
}
//ES6---->ES2015
//ES7---->ES2016
//ES8---->ES2017
//babel--->
入口文件详细
import css from './main.css';
import img from './pic1.jpg';
import JS from './demo.js';
window.addEventListener('load', () => {
for (let i = 0; i < $('button').length; i++) {
$('button')[i].addEventListener('click', () => {
alert(i+1);
})
}
console.log(num1+JS.num2);
console.log(JS.heheda);
$('#img').src='./dist/'+img;
});
let num1=20;
function $(selector) {
if (!typeof selector == 'string') return;
let res = selector.substring(0, 1);
switch (res) {
case '#':
return document.querySelector(selector);
break;
default:
return document.querySelectorAll(selector);
}
}


