[TOC]
```
webpack是基于NodeJs
webpack把一切都看做是模块
优化分为 开发优化、上线优化
开发构建流程:1.需求确认、2.本地开发(development)、3.构建发布(production)、4.代码上线
项目开发:1.技术选型、2.目录规范、3.确定依赖、4.模块引入(依赖、插件)、5.数据请求(mock数据、本地服务器)、6.代码解析、7.开发调试
ES6有一小部分语法是可以直接在浏览器上解析的,但绝大部分还不支持、需要借助工具解析
```
## :-: NodeJs基本使用
```
npm -- 是包管理工具
- less (css预编译)
$ npm install -g less
- less解析
$ lessc demo.less demo.css
- uglify-js (js压缩)
$ npm install -g uglify-js
- js压缩
$ uglify demo.js -o demo.min.js
- webpack
$ npm install -g webpack
```
## :-: 前端工程化概念
```
前端工程化:
1.前端工程化是一个思想,它不是一个技术、也不是一个框架
2.前端工程化是根据业务特点,将前端开发流程规范化、标准化。用于提升前端工程师的开发效率和代码质量。
开发 --> 测试 --> 部署
模块化、组件化 是前端工程化的体现、(高内聚低耦合)
前端模块化:
js模块化、css模块化
1.将共同的代码抽离,有助于代码的复用、
防止命名冲突:函数->命名空间->闭包->模块引入
模块化规范:CommonJs、AMD、CMD、Es6
CommonJs -- [同步加载] node环境的规范,最初用在服务器端。适合服务器端,不适应浏览器(不兼容,原因浏览器缺少 module、exports、require、global 环境变量)。需要使用可以用工具转换(broeserify)。
broeserify -- 工具,可以将CommonJs模块编译成浏览器可以使用的模块。
安装:$ install -g broeserify
使用:$ broeserify main.js -o bundle.js
导出 -- module.exports = {abc:123};
导入 -- var m1 = require('./modules/m1'); // {abc:123}
AMD -- [异步加载]适合浏览器,AMD依赖前置,不能按需加载。AMD规范的使用依赖于require.js。
define(moduleID,['module_1',['module_2'],function(m1,m2){···});
CMD -- [异步加载]跟AMD的主要区别在于,AMD依赖前置,CMD不依赖前置,可以按需加载。
Es6 -- [异步加载]自带模块化,通过babel工具语法降级。功能比前几个方案(CommonJs、AMD、CMD)更为强大。
1.模块化是指将一个复杂的系统分解为多个模块,方便编码。
2.可以降低复杂性,降低代码耦合度,部署方便,提高效率。
3.模块化的好处:
a.避免命名冲突,减少变量空间污染。
b.更好的分离代码,按需加载。
c.更高的复用性。
d.更高可维护性。
前端组件化:
页面UI拆分
```
```
自动化构建工具:Webpack、Gulp、Grunt、Fis ...
构建工具 就是将源代码转换成可以直接执行的JavaScript、Css、HTML代码。
自动化 让代码自动化地执行这一系列复杂的流程(代码转换、文件优化、代码分割、模块合并、自动刷新、代码校验、自动发布)
构建工具的选型:
a.是否符合团队的技术栈
b.是否符合项目的需求
c.生态圈是否完善、社区是否活跃(被支持的程度)
webpack优点:
a.专注于处理模块化的项目
b.可通过plugin扩展,完整好用不失灵活
c.使用场景不局限于web开发
d.社区活跃,紧跟时代发展的新特性
e.良好的开发体验
```
## :-: webpack - 安装
```
- 先安装cnpm (淘宝镜像:http://npm.taobao.org)
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
- 将webpack安装到全局
$ cnpm install webpack -g
- 安装webpack-cli
$ cnpm install webpack-cli -g
- 查看webpack版本号
$ webpack -v
- 初始化工程
$ cnpm init -y // 会生成 package.json
- 下载安装局部的webpack ()
$ cnpm install webpack --save-dev
$ cnpm install webpack --D // 简写
$ cnpm install webpack // 不加 --save-dev 默认为局部
$ cnpm install jQuery --save-dev
```
## :-: webpack核心概念
```
入口(entry)
入口起点(entry point)指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的开始。进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖的。
出口(output)
output 属性告诉 webpack 在哪里输出它所创建的 bundles,以及如何命名这些文件,默认值为 ./dist。基本上,整个应用程序结构,都会被编译到你指定的输出路径的文件夹中。你可以通过在配置中指定一个 output 字段,来配置这些处理过程:
loader
loader 让 webpack 能够去处理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)。loader 可以将所有类型的文件转换为 webpack 能够处理的有效模块,然后你就可以利用 webpack 的打包能力,对它们进行处理。
插件(plugins)
loader 被用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。插件接口功能极其强大,可以用来处理各种各样的任务。
模式
通过选择 development 或 production 之中的一个,来设置 mode 参数,你可以启用相应模式下的 webpack 内置的优化
```
- 前端工具库
- HTML
- CSS
- 实用样式
- JavaScript
- 模拟运动
- 深入数组扩展
- JavaScript_补充
- jQuery
- 自定义插件
- 网络 · 后端请求
- css3.0 - 2019-2-28
- 选择器
- 边界样式
- text 字体系列
- 盒子模型
- 动图效果
- 其他
- less - 用法
- scss - 用法 2019-9-26
- HTML5 - 2019-3-21
- canvas - 画布
- SVG - 矢量图
- 多媒体类
- H5 - 其他
- webpack - 自动化构建
- webpack - 起步
- webpack -- 环境配置
- gulp
- ES6 - 2019-4-21
- HTML5补充 - 2019-6-30
- 微信小程序 2019-7-8
- 全局配置
- 页面配置
- 组件生命周期
- 自定义组件 - 2019-7-14
- Git 基本操作 - 2019-7-16
- vue框架 - 2019-7-17
- 基本使用 - 2019-7-18
- 自定义功能 - 2019-7-20
- 自定义组件 - 2019-7-22
- 脚手架的使用 - 2019-7-25
- vue - 终端常用命令
- Vue Router - 路由 (基础)
- Vue Router - 路由 (高级)
- 路由插件配置 - 2019-7-29
- 路由 - 一个实例
- VUEX_数据仓库 - 2019-8-2
- Vue CLI 项目配置 - 2019-8-5
- 单元测试 - 2019-8-6
- 挂载全局组件 - 2019-11-14
- React框架
- React基本使用
- React - 组件化 2019-8-25
- React - 组件间交互 2019-8-26
- React - setState 2019-11-19
- React - slot 2019-11-19
- React - 生命周期 2019-8-26
- props属性校验 2019-11-26
- React - 路由 2019-8-28
- React - ref 2019-11-26
- React - Context 2019-11-27
- PureComponent - 性能优化 2019-11-27
- Render Props VS HOC 2019-11-27
- Portals - 插槽 2019-11-28
- React - Event 2019-11-29
- React - 渲染原理 2019-11-29
- Node.js
- 模块收纳
- dome
- nodejs - tsconfig.json
- TypeScript - 2020-3-5
- TypeScript - 基础 2020-3-6
- TypeScript - 进阶 2020-3-9
- Ordinary小助手
- uni-app
- 高德地图api
- mysql
- EVENTS
- 笔记
- 关于小程序工具方法封装
- Tool/basics
- Tool/web
- parsedUrl
- request