前端工程化

  • 模块化 (js模块化,css模块化,其他资源模块化)
  • 组件化 (复用现有的UI结构、样式、行为)
  • 规范化 (目录结构的划分、编码规范化、接口规范化、文档规范化、Git分支管理)
  • 自动化 (自动化构建、自动部署、自动化测试)

webpack

  • 前端项目工程化的具体解决方案
  • 提供友好的前端模块化开发支持,以及代码压缩混淆、处理js兼容性、性能优化等强大功能

安装

  • 初始化项目

    npm init -y
  • 安装

    npm install webpack webpack-cli --save-dev
  • 根目录创建webpack配置文件 webpack.config.js
// webpack.config.js
module.exports = {
...
}

webpack.config.js 配置

1.mode模式

  • development

    • 开发环境
    • 不会对打包生成的文件进行代码压缩和性能优化
    • 打包速度快
  • production
    • 生产环境
    • 会对打包生成的文件进行代码压缩和性能优化
    • 打包速度慢
module.exports = {
mode: 'development'
}

2.出入口文件

  • entry 打包文件入口,默认为:src/index.js
  • output 打包文件输出,默认为: dist/main.js
const path = require('path')
module.exports = {
entry: path.join(__dirname, './src/index.js'), // 入口文件
output: {
path: path.join(__dirname, './dist'), // 输出目录
filename: 'bundle.js' // 输出文件
}
}

3.loader加载器

webpack文件加载器,webpack默认只能打包处理.js文件,其他非.js后缀文件需要loader加载器处理完成后才能进行打包

3-1. less, css等样式文件处理

  • 依赖安装 npm install style-loader css-loader less-loader --save-dev
  • rules配置添加规则: test表示匹配文件类型,use表示要调用的loader,调用顺序为从后往前
module.exports = {
rules: [
{ test: /\.css$/, use: ['style-loader', 'css-loader'] }, // css文件处理
{ test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }, // less文件处理
]
}

3-2. url路径相关文件处理,如图片、字体文件、csv、xml文件等

  • 依赖安装 npm install url-loader file-loader csv-loader xml-loader --save-dev
  • url-loader参数:limit指定图片大小,单位为Byte,<=limit大小图片,才会被转为base64格式图片
  • 参数配置为url参数与与options对象两种形式
module.exports = {
rules: [
// url参数形式配置
{ test: /\.jpg|png|gif$/, use: 'url-loader?limit=10000' },
// url参数options形式配置
{
test: /\.jpg|png|gif$/,
use: {
loader: 'url-loader',
options: {
limit: 10000,
outputPath: 'image' // 明确指定打包生成的图片文件存放到dist目录下的image文件夹中
}
}
},
// 字体文件
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
use: {
loader: 'url-loader',
options: { limit: 10000 }
}
},
// csv文件
{
test: /\.(csv|tsv)$/i,
use: {
loader: 'csv-loader'
}
},
// xml文件
{
test: /\.xml$/i,
use: {
loader: 'xml-loader'
}
}
]
}

3-3. js高级语法处理

  • 依赖安装 npm install ... --save-dev
名称 描述
@babel/core babel核心工具
@babel/preset-env babel预定义环境
babel-loader babel加载器,编译js文件用
core-js 使老版本浏览器兼容新版ES语法
module.exports = {
rules: [
{
test: /\.js$/,
use: {
loader: 'babel-loader',
options: {
// 设置预定义环境
presets: [
[
'@babel/preset-env', // 指定环境的插件
// 配置信息
{
// 兼容的浏览器目标版本
targets: {
'chrome': '58',
'ie': '11'
},
// 指定core.js版本
'corejs': '3',
// 使用corejs方式 'usage':按需加载
'useBuiltIns': 'usage'
}
]
]
}
}
}
]
}

4.webpack-dev-server

  • webpack 开发环境http服务器
  • 安装 npm install webpack-dev-server --save-dev
  • package.json配置scripts
"scripts": {
"dev": "webpack serve"
}
  • 启动 npm run dev
  • webpack配置文件devServer节点
module.exports = {
devServer: {
open: true, // npm run dev后,自动打开浏览器
host: '127.0.0.1', // 主机地址
port: 8080 // 端口号,默认为8080
}
}

5.插件

  • html-webpack-plugin 自定义输出index.html内容,会将打包好的bundle.js自动注入index.html的底部

    • 安装 npm install html-webpack-plugin --save-dev
    • plugins节点引入
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html' // 指定入口自定义的html文件
})
]
}
  • clean-webpack-plugin 打包时自动清理dist目录旧文件插件

    • 安装 npm install clean-webpack-plugin --save-dev
    • 引入
const CleanWebpackPlugin = require('clean-webpack-plugin')
module.exports = {
plugins: [
new CleanWebpackPlugin()
]
}

6.SourceMap

  • 存储代码压缩混淆前后的对应关系文件
  • 代码出错时,可以通过对应关系,直接显示原始代码出错位置,方便后期调试
  • sourceMap选项很多,具体可参考webpack devtool sourcemap
  • 常用选项为: source-map inline-source-map eval-source-map
module.exports = {
// eval-source-map 使"运行报错的行数"与”源代码行数“保持一致,但性能较低
devtool: 'eval-source-map'
}
  • 实践建议

    • 开发环境建议设置为 eval-source-map,可以精准定位到具体的错误行
    • 生成环境建议关闭sourceMap,或者设置值为 nosources-source-map,防止源码泄露,提高安全性

打包发布

  • package.json配置scripts
"scripts": {
"build": "webpack --mode production"
}
  • 打包 npm run build

摘要

更多配置可查看官方文档

前端工程化 Webpack基础的更多相关文章

  1. 前端工程化webpack(一)

    webpack 的基本用法   1.app.js 引入模块 import moduleLog from './module.js' //引入moduleLog从./module.js 2.module ...

  2. 前端工程化-webpack(babel编译ES6)

    最新版安装与普通安装 使用babel-loader编译ES6,需要遵循规范,安装babel-presets 规范列表 对应babel-loader,babel-preset安装最新版和普通版: pre ...

  3. 前端工程化-webpack(打包JS)(二)

    一.第一种打包方式 webpack entry<entry> output 假设目录结构如下: index.html是入口文件 打包app.js为bundle.js如下 app.js 当使 ...

  4. 前端工程化-webpack简介(一)

    本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependenc ...

  5. 前端工程化-webpack篇之babel-polyfill与babel-runtime(三)

    关于 Babel 如果我们没有配置一些规则,Babel 默认只转换新的 JavaScript 句法(syntax),而不转换新的 API,比如 Iterator.Generator.Set.Maps. ...

  6. 使用webpack+vue.js构建前端工程化

    参考文章:https://blog.csdn.net/qq_40208605/article/details/80661572 使用webpack+vue.js构建前端工程化本篇主要介绍三块知识点: ...

  7. 前端工程化(二)---webpack配置

    导航 前端工程化(一)---工程基础目录搭建 前端工程化(二)---webpack配置 前端工程化(三)---Vue的开发模式 前端工程化(四)---helloWord 继续上一遍的配置,本节主要记录 ...

  8. [转]基于gulp和webpack的前端工程化

    本文样例代码 :https://github.com/demohi/learning-gulp 本文主要简单介绍一下基于gulp和webpack的前端工程化. 技术栈 React.js reFlux ...

  9. 基于webpack的前端工程化开发解决方案探索(一):动态生成HTML(转)

    1.什么是工程化开发 软件工程的工程化开发概念由来已久,但对于前端开发来说,我们没有像VS或者eclipse这样量身打造的IDE,因为在大多数人眼中,前端代码无需编译,因此只要一个浏览器来运行调试就行 ...

随机推荐

  1. Java 使用jcifs读写共享文件夹报错jcifs.smb.SmbException: Failed to connect: 0.0.0.0<00>/10.1.*.*

    Q:使用jcifs读写Windows 10 共享文件夹中的文件报jcifs.smb.SmbException: Failed to connect: 0.0.0.0<00>/10.1.*. ...

  2. python写的百度图片爬虫

    学了一下python正则表达式,写一个百度图片爬虫玩玩. 当技术遇上心术不正的人,就成我这样的2B青年了. python3.6开发.程序已经打包好,下载地址: http://pan.baidu.com ...

  3. python中面向对象VS面向过程

    面向过程编程:首先分析出解决问题所需要的步骤(即"第一步做什么,第二步做什么,第三步做什么"),然后用函数实现各个步骤,再依次调用. 面向对象编程:会将程序看作是一组对象的集合,用 ...

  4. PentestBOX教程

    0x01 Pentest BOX Pentest Box:渗透测试盒子,是一款Windows平台下预配置的便携式开源渗透测试环境,而它也是著名黑客Kapustkiy常用的工具之一.这里集成的大都是Li ...

  5. mysql 的奇妙历险

    mysql 的奇妙历险 这几天在练习sql的时候,碰到下面几个题, 如下 他的表字段是这些 create table Student( SId varchar(10), # 学生id Sname va ...

  6. BI工具数据可视化效果哪家强?我选这款!

    BI工具是商业智能(Business Intelligence)软件的英文缩写.目前,商业智能通常被理解为将企业中现有的数据转化为知识,帮助企业做出明智的业务经营决策的工具. 企业经常会为如何选择BI ...

  7. 一文告诉你dashboard究竟有多重要!

    dashboard,我们一看这个词可能会觉得困惑,这是什么意思?看起来很高大上的样子. 实际上它的中文含义即是我们BI界老生常谈的话题--仪表盘.dashboard是商业智能仪表盘的简称,它是一般商业 ...

  8. 思迈特软件与明略科技优势互补强强联合,快速迭代引领BI市场

    从全球范围看,自从上世纪80年代信息技术在企业应用中开始普及,至今一共经历了信息化.SaaS化.移动化和AI化四个阶段. 人工智能在中国发展的机遇和挑战 中国的AI创业公司之间竞争非常激烈,尤其表现在 ...

  9. 【C# .Net GC】GC内存分配规则

    GC 管理内存分配和回收 公共语言运行时的垃圾回收器为应用程序管理内存的分配和释放. https://docs.microsoft.com/zh-cn/dotnet/standard/automati ...

  10. Oracle导出/导入数据方法--两种方法(pde格式/dmp格式)

    转至:https://www.cnblogs.com/houbxblogs/articles/13365557.html?ivk_sa=1024320u 1.导出数据方法一(pde格式) 工具→ 导出 ...