webpack

剖析Babel——Babel总览 AST Explorer

背景

为什么需要构建⼯具?

  • 代码转译(浏览器不支持的CommonJS 规范, 部分ES6, JSX)
  • CSS 预处理器(前缀补全)
  • 开发环境: 自动编译, 自动刷新
  • 生产环境: 压缩混淆; 图片压缩; 自动部署
  • 模块合并
  • 代码分割
  • 代码校验

why webpack?

---- 社区⽣态丰富; 配置灵活和插件化扩展; 更新迭代速度快

webpack 配置组成 -- 4个核⼼概念

const path = require('path')
module.exports = {
  // 打包的入口文件
  entry: './src/index.js',
  // 打包的输出
  output: {
    path: path.resolve('./dist'),  // 输出的路径
    filename: 'main.js' //  输出文件名字
  },
  // 环境
  mode: 'production',
  // loader配置
  module: {
    rules: [
      {test: /\.txt$/, use: 'raw-loader'}
    ]
  },
  // 插件配置
  plugins: [
    new HTMLwebpackPlugin({
      template: './src/index.html'
    })
  ]
}
复制代码
  • 入口(entry): 程序的入口js
  • 输出(output): 打包后存放的位置
  • loader: 用于对模块的源代码进行转换
  • 插件(plugins): 插件目的在于解决 loader无法实现的其他事 注: webpack2起规定output必须是绝对路径, 否则报错:
 Invalid configuration object. Webpack has been initialised using a 
configuration object that does not match the API schema.
 - configuration.output.path: The provided value "./dist" is not an 
absolute path!
   -> The output directory as **absolute path** (required).
复制代码

ps:

  path.join(__dirname, "./dist")路径拼接
  path.resolve("./dist")路径解析当前相对路径的绝对路径
  path.resolve(__dirname, "./dist")
复制代码

webpack基础

环境搭建

安装 nvm,node.js

webpack是用node写的, 其配置文件遵循着CommonJS规范
安装 nvm: 
(https://github.com/nvm-sh/nvm)·
 - 通过 curl 安装:curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
 - 通过 wget 安装:wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
安装 Node.js 和 NPM
 - nvm install v10.15.3
 - 检查是否安装成功:node -v, npm -v
复制代码
npx
npx 5.2 以上的版本提供了一个npx 命令, 主要作用是调用项目内部安装的模块
原理是在 node_modules\.bin 中找到对应的命令执行
如使用项目内部的 webpack:
npx webpack -v
复制代码

安装 webpack 和 webpack-cli

 - mkdir my-project
 - cd my-project
 - npm init -y
 - npm install webpack webpack-cli --save-dev
 - 检查是否安装成功: ./node_modules/.bin/webpack -v
(--类似 C:\Users\dzh\AppData\Roaming\nvm\v10.6.0)
ps: 
(1)  ./node_modules/.bin/webpack 这条命令在windows环境下出现问题:
(’.’ 不是内部或外部命令,也不是可运行的程序或批处理文件。)
这个问题在使用webpack, gulp或git等等的时候都会出现, windows下运行的正确命令:
.\node_modules.bin\webpack -v
只不过把斜杠换了个方向而已,当然不仅是这条命令,很多命令windows环境下与linux或mac还是有区别的,所以大家在使用时请注意了。 
(2)  用局部依赖的webpack运行的两种方法: 
a. .\node_modules.bin\webpack 命令
b.  在package.json里配置”start”:
"scripts": {
    "start": "webpack"
  },
这样就可以使用 npm start 这条命令运行局部的webpack了
复制代码

cli命令

  • webpack --config 指定配置⽂件
webpack4.0 之后可以实现0配置打包构建 ( 限制较多, 无法自定义 ) 
开发中常用的还是使用webpack配置进行打包构建
./node_modules/webpack-cli/bin/config/config-yargs.js 中规定,
 -- webpack.config.js or webpackfile.js 是默认配置⽂件
复制代码
  • webpack --mode development
没有配置mode参数会警告: 
( 默认为production, 可以手动设置为development, 
区别就是是否进行压缩混淆 )
WARNING in configuration
The 'mode' option has not been set, webpack will fallback to 'production' for 
this value. Set 'mode' option to 'development' or 'production' to enable defaults 
for each environment.
You can also set it to 'none' to disable any default behavior. Learn more: 
https://webpack.js.org/configuration/mode/
复制代码
  • webpack --progress //显示进度条
  • webpack -p 压缩混淆脚本

这个非常非常重要!曾经一个未压缩的 700kb 的文件,压缩后直接降到 180kb (主要是样式这块一句就独占一行脚本,导致未压缩脚本变得很大)

  • webpack -d 生成map映射文件,告知哪些模块被最终打包到哪里了其中的
  • webpack --color //添加颜色

自动编译工具

每次要编译代码时都手动运行 npm run build 会很麻烦, 为提高开发效率, 可使用自动编译工具, 在代码发生变化后自动编译代码 项目上线时直接用webpack打包构建, 不需要使用自动编译工具

webpack's Watch Mode:

监视本地项目文件的变化, 发现有修改的代码会自动编译打包, 生成输出文件

  • 通过cli命令行设置watch的参数: webpack --watch
1. 配置package.json的scripts"watch": "webpack --watch"
2. 运行npm run watch
复制代码
  • 通过配置文件修改watch参数 watch: 'true'
module.exports = {
  watch: true
}
复制代码

注: 命令行接口(Command Line Interface)参数的优先级,高于配置文件参数。例如,如果将 --mode="production" 传入 webpack CLI,而配置文件使用的是 development,最终会使用 production

webpack-dev-server ( 推荐 )

a. 在内部开启服务器, 访问服务器来打开项目,

b. 在内存中生成(不会在文件中生成)一个打包好的bundle.js专供开发时使用,打包效率高,

c. 修改代码后会自动重新打包并刷新浏览器,用户体验佳

webpack-dev-server原理: 做了一个express服务器, 托管在项目根目录

css优化

1.将css提取到独立文件中--extract-text-webpack-plugin

webpack 4.0以前,使用extract-text-webpack-plugin插件提取样式

style-loadermain.jsimport引入的css通过dom操作放在了style标签中

优:没有link减少网络请求次数 缺:1. 当css很多模块都用到了时代码冗余;2. jscss没有代码分离

mini-css-extract-plugin插件,将css提取为独立的文件,对每个包含css的js文件都会创建一个css文件,支持按需加载csssourceMap

优势: -异步加载 -不重复编译,性能更好 -更容易使用 -只针对css

2.自动添加css前缀(-webkit,)

  1. 开启css压缩
租房办理居住证:
0. 办居住登记
1. 先办居住房屋租赁合同网签--2号线东昌路,
2. 再办居住房屋租赁合同登记备案,由各街镇社区事务受理服务中心受理审核。
p.s. 网签和备案是两个不同的环节,带房东先去中介或房产交易中心---张杨路2899号受理点迁移至南泉北路201号(房地大厦)一楼,承接个人住房租赁合同网签业务(周一至周六上午 9:00-11:00;下午 13:30-16:00)---进行租赁合同网签,再带上房东去街道---张江路1458号(距离广兰路1公里)---办理租赁备案~
- 出租房,房产证上只有阿姨的名字吗,没有别人吗..如果有别人,需要有委托书
复制代码

npm audit fix

audited 审计;稽核;旁听(大学课程)

parallel

平行的;极相似的;同时发生的;相应的;对应的;并行的 n. (尤指不同地点或时间的)极其相似的人(或情况、事件等);相似特征;相似特点;(地球或地图的)纬线,纬圈 v. 与…相似;与…同时发生;与…媲美;比得上 adv. 平行地,并列地

digisignResult

{"custName":"","account":"082124500513","msgCnt":"","token":"f45e6cce75d54e4c8f00785a91e0a946","custId":"","mobile":"082124500513","city":"","cityName":"","sysDate":"","ad":"","paPayToken":"","platform":"","accountId":"37319741982698311680","mark":"","Id":"","pointsSwitch":"","isOrangebankCust":"","InvitationCode":"","isNew":"","machineId":"","machineSN":"","customerId":"","entityId":"","isYZTUser":"","ivrCount":"","cisCustNo":"","preLoginTime":"","accountType":"F0093C2A8E5B28484806BF2250AAD5B5","dateRegister":"","dateIdentityInfo":"","givenName":"Sulistyono","middleName":"","familyName":"Sulistyono","sex":"","certId":"350604261236548799","certType":""}

Vue中两个较为高级的静态方法--mixin和extend

file:///data/user/0/com.paem.idn/files/cache_dir/webroot/inloan/sign.html?

applyno=IDPH2019081910000409&ydandroid_version=2.0.0&ssEnv=stg2&pafEnv=stg1&lufaxEnv=stg4&country=cn#/

applyno=IDPH2019081910000409&ydandroid_version=2.0.0&ssEnv=stg2&pafEnv=stg1&lufaxEnv=stg4&country=cn#/

转载于:https://juejin.im/post/5d5d06276fb9a06b2a204377

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值