前端小趴菜
涉及知识
1 | yarn init -y |
1 | yarn add webpack-cli -D |
基础配置:(webpack.config.js)
1 | let path = require('path'); |
打包命令:
1 | // 可通过 --config 传入参数设置配置文件名称 默认(webpack.config.js) |
1 | yarn add webpack-dev-server -D |
配置文件添加配置:
1 | devServer: { |
添加脚本
1 | "script": { |
将打包后的js,注入到 html 模板中
1 | yarn add html-webpack-plugin -D |
配置文件:
1 | let htmlWebpackPlugin = require('html-webpack-plugin') |
引入适合的loader,在配置 loader 处理规则
css-loader 处理 @import 这种语法映入的样式
style-loader 把css 插入到 head 标签中
处理 less: less-loader
处理 sass: node-sass sass-loader
处理 stylus: stylus-loader
配置:
1 | module.exports = { |
为啥要用这个?
上述配置 最终都是通过 style-loader 将 样式转化为 style 标签插入到 head 标签中
而这个插件则是将 css 转化为 link 标签 再 插入 head 中、
它用于代替 style-loader。
1 | yarn add mini-css-extract-plugin -D |
1 | let htmlWebpackPlugin = require('html-webpack-plugin') |
1 | yarn add autoprefixer postcss-loader -D |
1 | let htmlWebpackPlugin = require('html-webpack-plugin') |
还需要配置 postcss-loader 使用 autoprefixer 插件
根目录新增 postcss.config.js
1 | module.exports = { |
css 压缩:optimize-css-assets-webpack-plugin
js 压缩:uglifyjs-webpack-plugin
1 | yarn add optimize-css-assets-webpack-plugin uglifyjs-webpack-plugin -D |
1 | let htmlWebpackPlugin = require('html-webpack-plugin') |
babel 三件套
babel-loader 转化源文件
@babel/core 核心模块有转化方法
@babel/preset-env 转化模块,es6->es5
@babel/plugin-proposal-class-properties 兼容es高级class语法
@babel/plugin-proposal-decorators 兼容装饰器语法
1 | yarn add babel-loader @babel/core @babel/preset-env -D |
1 | let htmlWebpackPlugin = require('html-webpack-plugin') |
生成器,promise 等一些内置方法,可能需要额外配置
@babel/plugin-transform-runtime
@babel-polyfill 兼容更高es语法,
1 | // 生产开发都需要 |
1 | // "./app/js" 为js 入口 |
js语法校验: eslint
官网可视化配置,配置完后可直接下载配置文件 .eslintrc.json
1 | let htmlWebpackPlugin = require('html-webpack-plugin') |
例如:将 jQuery 暴露到全局
在代码中通过内联loader 将 jQuery 以 $ 暴露到 全局
1 | import $ from 'expose-loader?$!jquery' |
在配置项中引入,这样
1 | module.exports = { |
每个模块自动注入$
1 | let webpack = require('webpack') |
还可以在index.html 模板 用 script 标签引用 jquery CDN
通过MDN引入的依赖,需要设置不需要打包选项
通过 externals 使webpack 不处理某些依赖库
1 | module.exports = { |
图片的引入方式
1、在 js 中创建 图片引入
2、在css引入 background(‘url’)
3、
1 | import url from './logo.png' |
使用 file-loader 处理
file-loader 默认在内部生成一张图片到 build 目录,把生成图片的名字返回来
background 中的 图片路径 css-loader 回去处理
1 | yarn add file-loader -D |
1 | module.exports = { |
处理页面 img 标签中的 图片 url
1 | yarn add html-withimg-loader -D |
1 | module.exports = { |
url-loader
url-loader 内部实现了 file-loader. 一般代替file-loader处理图片,将体积小的图片转成base64位,减少请求次数.
体积大的图片再用file-loader 处理
1 | module.exports = { |
就是将打包的文件放置指定的文件,使打包文件具有层次
1 | module.exports = { |
多入口,多出口. webpack 会打包多个入口js.
多个html 模板, 需要借助 html-webpack-plugin 插件
1 | let path = require('path') |
1 | let path = require('path') |
代码修改已保存就更新页面
1 | module.exports = { |
实用常用的插件
cleanWebpackPlugin
每次打包时清除上次的dist目录
1 | yarn add clean-webpack-plugin -D |
1 | const CleanWebpackPlugin = require('clean-webpack-plugin') |
copyWebpackPlugin
可以将指定文件或文件夹复制到指定文件
1 | yarn add copy-webpack-plugin -D |
1 | const copyWebpackPlugin = require('copy-webpack-plugin') |
bannerPlugin(wenpack内置)
版权声明,打包后的文件最顶端显示版权声明注释
1 | const webpack = require('webpack') |
前端开发测试时可配置 proxy 解决跨域问题
1 | // 比如 页面服务是 localhost 8080, 接口服务localhost 3000 |
对第三方模块的优化处理
1 | module.exports = { |
1 | const webpack = require('webpack') |
我们在 require 某个依赖时,webpack 默认会去解析这个依赖是否还依赖其他包,有的话就一起打包
noParse 则可设置不去检查这个依赖了
1 | module.exports = { |
在进行某个规则可具体优化。
在引用momentjs 实践处理库时,moment 默认引入了所有语言包,导致文件打包很大,可以设置忽略语言包
1 | // 设置语言包忽略后,如果要设置中文,需要手动引入中文包 |
开发中,有些不会变的模块可以提前打包成库,后边直接使用打包好的库。不需要每次都打包,下次打包体积就变小了
例如:react, react-dom 模块
新增打包配置文件 webpack-config.react.js
1 | let path = require('path') |
webpack.config.js 配置引用
1 | let path = require('path') |
在index.html 中 使用打包好的库
1 | <script src="/_dll_react.js" ></script> |
使用 第三方模块 happypack, 项目体积大的时候会使打包速度变快
1 | let path = require('path') |
tree-shaking
生产环境下打包会去除没用的代码, 但只对 import 语法有效。通过 require 方式引入的模块不会优化
scope hosting
作用域提升
1 | let a = 1; |
多入口环境下才能配置
页面 都引用了 a/b.js. 所以缓存 a/b.js
1 | let path = require('path') |
es6 草案语法 , 不管是 vue,还是react 都是靠这个语法实现的懒加载
1 | import('/xxx.js').then(data=> {}) |
1 | module.exports = { |
监听data模块变化
1 | import str from './data'; |
vue-cli 项目中 vue.config.js
1 | const ImageMinimizerPlugin = require("image-minimizer-webpack-plugin"); |
官方介绍:WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信内网页和微信小程序量身设计,令用户的使用感知更加统一。小程序开发中最常用到的一款框架,受广大开发人员的欢迎。
[图片上传失败…(image-5dd2d3-1654073247786)]
Github:https://github.com/Meituan-Dianping/mpvue 官网: http://mpvue.com/
官方介绍:mpvue是一个使用 Vue.js开发小程序的前端框架。框架基于 Vue.js核心,mpvue修改了 Vue.js的 runtime和 compiler实现,使其可以运行在小程序环境中,从而为小程序开发引入了整套Vue.js开发体验。
Github地址: https://github.com/Tencent/wepy 官网地址: https://tencent.github.io/wepy
官方介绍:组件化开发,完美解决组件隔离,组件嵌套,组件通信等问题,支持使用第三方 npm 资源,自动处理 npm 资源之间的依赖关系,完美兼容所有无平台依赖的 npm 资源包.
[图片上传失败…(image-f7e73e-1654073247786)]
地址:https://developers.weixin.qq.com/miniprogram/dev/framework/MINA.html
官方介绍:框架提供了自己的视图层描述语言 WXML 和 WXSS,以及基于 JavaScript 的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,可以让开发者可以方便的聚焦于数据与逻辑上。
一款轻巧的渐进式微信小程序框架
Tina.js 开源框架地址: https://github.com/tinajs/tina
官方介绍:是一款轻巧的渐进式微信小程序框架,保留 MINA (微信小程序官方框架) 的大部分 API 设计;无论你有无小程序开发经验,都可以轻松过渡上手。
地址: https://github.com/wdfe/weweb
官方介绍:weweb是一个兼容小程序语法的前端框架,你可以用小程序的写法,来写web应用。如果你已经有小程序了,通过它你可以将你的小程序运行在浏览器中。
介绍:iView Weapp 提供了与 iView 一致的 UI 和尽可能相同的接口名称,大幅度降低了学习成本,是一套一套高质量的微信小程序 UI 组件库。
一个颜值高、好用、易扩展的微信小程序 UI 库
https://cnodejs.org/topic/589d625a5c8036f7019e7a4a
官方介绍:ZanUI-WeApp结合了微信的视觉规范,为用户提供更加统一的使用感受。 包含 badge、btn、等共计 17 类组件或元素。
– 一个多端混合开发的好用的框架,熟悉一个适用性超强
框架地址: https://uniapp.dcloud.io/collocation/pages 文档地址: https://uniapp.dcloud.io/README 相适应的ide:Hbuilder 可以直接使用该ide打包相应所需的端代码 官方介绍:开发一次,覆盖多端
所谓”小程序容器”,就是一个小程序的运行环境。 App 只要加载这个运行环境,就具备了运行小程序的能力。说得直白一点,它让你拥有了微信那样的小程序引擎,但是不必自己开发。
以前的方案是将小程序代码打包成适配各种平台的小程序运行环境。小程序容器则是可以适配各种小程序框架的代码,不需要额外打包成其他格式,直接运行
FinClip 提供一套 SDK,不仅支持手机(iPhone、Android),还支持桌面(Windows、Linux、macOS)、手表、车机等各种平台。你的 App 只要加载了这套 SDK,就能直接运行微信小程序(以及小游戏),一行代码也不用修改。
也就是说,它完全支持微信小程序的 WXML 语法,无需二次开发,体验与微信端保持一致。你就可以把你的小程序,在微信运行一份,在自己的 App 也运行一份。
同时,它还支持 小程序一键转换成 App,可以将已有小程序代码导出为 IOS 与 Android 中可用的工程文件,并上架至各应用市场 。由于导出的工程文件自动集成了 FinClip SDK ,所以直接拥有小程序的运行能力,后续可在这个 APP 上继续上架更多小程序,自建自己的小程序生态。
对于小型开发者,这个产品是免费使用,只有企业级应用才需要付费。
https://mp.weixin.qq.com/debug/wxadoc/dev/demo.html
实例源码
可在微信中搜索“小程序示例”
1 | 所有项目源代码、资源文件等内容都将在微信公众号中提供下载地址。读者可以从我的微信公众号中获取项目效果图和最新版本源代码。代码包括Orange Can项目的小程序代码及部分功能的服务端PHP代码。 |
1 | 1、注册地址 |
1 | batchfile |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia-plus根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true