导语
Licia 是一套在开辟中实践积聚起来的有用 JavaScript 东西库。该库现在具有凌驾 300 个模块,同时支撑浏览器、node 及小递次运转环境,供应了包括日期花样化、md5、色彩转换等有用模块,可以极大地进步开辟效力。
媒介
由于小递次运转的是 JavaScript 代码,传统前端所运用的 JS 库理应也可以被用在小递次中才对。但是,经由现实测试,你会发现有相称一部份 npm 包是没法直接在小递次中跑起来的。比方前端工程师非常经常使用的 lodash,在小递次中引入会报错。
为何会如许?
主要原因就是绝大部份库的开辟者在设计时只会斟酌两种运转环境,浏览器和 node,而小递次并不会在其斟酌范围内。因而,只需开辟者的 JS 代码运用了只要浏览器与 node 中才有的接口,如 DOM 操纵、文件读写等,该库就不能一般地运转在小递次环境中。除此之外,假如他们运用了小递次禁用的功用,比方全局变量与动态代码实行,这时候代码跑在小递次环境也会失足。
运用
运用 npm 装置
1、 装置 npm 包
npm i miniprogram-licia --save
2、点击开辟者东西中的菜单栏:东西 –> 构建 npm
3、直接在代码中引入运用
const licia = require('miniprogram-licia');
licia.md5('licia'); // -> 'e59f337d85e9a467f1783fab282a41d0'
licia.safeGet({a: {b: 1}}, 'a.b'); // -> 1
天生定制化 util.js
运用 npm 包的体式格局会将一切功用引入到代码包中,大概会增添 100 kb 的大小。假如你只想引入所需剧本,可以运用在线东西天生定制化 util 库。
1、接见 https://licia.liriliri.io/builder.html
2、输入须要的模块名,点击天生下载 util.js。
3、将天生的东西库拷贝到小递次项目恣意目录下然后直接引入运用。
const util = require('../lib/util');
util.wx.getStorage({
key: 'test'
}).then(res => console.log(res.data));
长处
1、现在具有 270 多个模块可在小递次中一般运转,而 underscore 只要 120 个函数摆布。
2、与 lodash 比拟增添了不少越发有用的函数,比方 md5、atob、btoa、Emitter、dateFormat 等。
3、可以直接在小递次中引入运转,不像 lodash 须要举行肯定的修正才一般跑在小递次中。
4、定制化天生可以运用更小体积的东西库,这在限定了代码包大小的小递次中非常有用。
附录
这里只简朴列出函数及其功用引见,细致的用法请接见官网检察。
注:模块名右侧有小递次图标即表明可以在小递次中运用。
- Class: 建立 JavaScript 类。
- Color: 色彩转换。
- Dispatcher: Flux 调理器。
- Emitter: 供应观察者情势的 Event emitter 类。
- Enum: Enum 类完成。
- JsonTransformer: JSON 转换器。
- LinkedList: 双向链表完成。
- Logger: 带日记级别的简朴日记库。
- Lru: 简朴 LRU 缓存。
- Promise: 轻量 Promise 完成。
- PseudoMap: 类似 es6 的 Map,不支撑遍历器。
- Queue: 行列数据结构。
- QuickLru: 不运用链表的 LRU 完成。
- ReduceStore: 简朴类 redux 状况治理。
- Stack: 栈数据结构。
- State: 简朴状况机。
- Store: 内存存储。
- Tween: JavaScript 补间动画库。
- Url: 简朴 url 操纵库。
- Validator: 对象属性值校验。
- abbrev: 盘算字符串集的缩写鸠合。
- after: 建立一个函数,只要在挪用 n 次后才会挪用一次。
- allKeys: 猎取对象的一切键名,包括本身的及继续的。
- arrToMap: 将字符串列表转换为映照。
- atob: window.atob,运转在 node 环境时运用 Buffer 举行模仿。
- average: 猎取数字的平均值。
- base64: base64 编解码。
- before: 建立一个函数,只能挪用少于 n 次。
- binarySearch: 二分查找完成。
- bind: 建立一个绑定到指定对象的函数。
- btoa: window.btoa,运转在 node 环境时运用 Buffer 举行模仿。
- bubbleSort: 冒泡排序完成。
- bytesToStr: 将字节数组转换为字符串。
- callbackify: 将返回 Promise 的函数转换为运用回调的函数。
- camelCase: 将字符串转换为驼峰式。
- capitalize: 将字符串的第一个字符转换为大写,其他字符转换为小写。
- castPath: 将值转换为属性途径数组。
- centerAlign: 字符串居中。
- char: 根据指定的整数返回 unicode 编码为该整数的字符。
- chunk: 将数组拆分为指定长度的子数组。
- clamp: 将数字限定于指定区间。
- className: 兼并 class。
- clone: 对指定对象举行浅复制。
- cloneDeep: 深复制。
- cmpVersion: 比较版本号。
- combine: 建立一个数组,用一个数组的值作为其键名,另一个数组的值作为其值。
- compact: 返回数组的拷贝并移除个中的虚值。
- compose: 将多个函数组合成一个函数。
- concat: 将多个数组兼并成一个数组。
- contain: 搜检数组中是不是有指定值。
- convertBase: 对数字举行进制转换。
- createAssigner: 用于建立 extend,extendOwn 和 defaults 等模块。
- curry: 函数柯里化。
- dateFormat: 简朴日期花样化。
- debounce: 返回函数的防反跳版本。
- decodeUriComponent: 类似 decodeURIComponent 函数,只是输入不正当时不抛失足误并尽量地对其举行解码。
- defaults: 添补对象的默认值。
- define: 定义一个模块,须要跟 use 模块合营运用。
- defineProp: Object.defineProperty(defineProperties) 的快捷体式格局。
- delay: 在指定时长后实行函数。
- detectBrowser: 运用 ua 检测浏览器信息。
- detectMocha: 检测是不是有 mocha 测试框架在运转。
- detectOs: 运用 ua 检测操纵系统。
- difference: 建立一个数组,该数组的元素不存在于给定的别的数组中。
- dotCase: 将字符串转换为点式。
- each: 遍历鸠合中的一切元素,用每一个元素当作参数挪用迭代器。
- easing: 缓动函数,参考 http://jqueryui.com/ 。
- endWith: 搜检字符串是不是以指定字符串末端。
- escape: 转义 HTML 字符串,替代 &,<,>,”,`,和 ‘ 字符。
- escapeJsStr: 转义字符串为正当的 JavaScript 字符串字面量。
- escapeRegExp: 转义特别字符用于 RegExp 组织函数。
- every: 搜检是不是鸠合中的一切元素都能经由过程真值检测。
- extend: 复制多个对象中的一切属性到目的对象上。
- extendDeep: 类似 extend,但会递归举行扩大。
- extendOwn: 类似 extend,但只复制本身的属性,不包括原型链上的属性。
- extractBlockCmts: 从源码中提取块解释。
- extractUrls: 从文本中提取 url。
- fibonacci: 盘算斐波那契数列中某位数字。
- fileSize: 将字节数转换为易于浏览的情势。
- fill: 在数组指定位置添补指定值。
- filter: 遍历鸠合中的每一个元素,返回一切经由过程真值检测的元素构成的数组。
- find: 找到鸠合中第一个经由过程真值检测的元素。
- findIdx: 返回第一个经由过程真值检测元素在数组中的位置。
- findKey: 返回对象中第一个经由过程真值检测的属性键名。
- findLastIdx: 同 findIdx,只是查找递次改成从后往前。
- flatten: 递归拍平数组。
- fnParams: 猎取函数的参数名列表。
- format: 运用类似于 printf 的体式格局来花样化字符串。
- fraction: 转换数字为分数情势。
- freeze: Object.freeze 的快捷体式格局。
- freezeDeep: 递归举行 Object.freeze。
- gcd: 运用欧几里德算法求最大公约数。
- getUrlParam: 猎取 url 参数值。
- has: 搜检属性是不是是对象本身的属性(原型链上的不算)。
- hslToRgb: 将 hsl 花样的色彩值转换为 rgb 花样。
- identity: 返回传入的第一个参数。
- idxOf: 返回指定值第一次在数组中涌现的位置。
- indent: 对文本的每一行举行缩进处置惩罚。
- inherits: 使组织函数继续另一个组织函数原型链上的要领。
- insertionSort: 插入排序完成。
- intersect: 盘算一切数组的交集。
- intersectRange: 盘算两个区间的交集。
- invert: 天生一个新对象,该对象的键名和键值举行换取。
- isAbsoluteUrl: 搜检 url 是不是是相对地点。
- isArgs: 搜检值是不是是参数范例。
- isArr: 搜检值是不是是数组范例。
- isArrBuffer: 搜检值是不是是 ArrayBuffer 范例。
- isArrLike: 搜检值是不是是类数组对象。
- isBool: 搜检值是不是是布尔范例。
- isBrowser: 检测是不是运转于浏览器环境。
- isClose: 搜检两个数字是不是近似相称。
- isDataUrl: 搜检字符串是不是是有用的 Data Url。
- isDate: 搜检值是不是是 Date 范例。
- isEmail: 简朴搜检值是不是是正当的邮件地点。
- isEmpty: 搜检值是不是是空对象或空数组。
- isEqual: 对两个对象举行深度比较,假如相称,返回真。
- isErr: 搜检值是不是是 Error 范例。
- isEven: 搜检数字是不是是偶数。
- isFinite: 搜检值是不是是有限数字。
- isFn: 搜检值是不是是函数。
- isGeneratorFn: 搜检值是不是是 Generator 函数。
- isInt: 搜检值是不是是整数。
- isJson: 搜检值是不是是有用的 JSON。
- isLeapYear: 搜检年份是不是是闰年。
- isMap: 搜检值是不是是 Map 对象。
- isMatch: 搜检对象一切键名和键值是不是在指定的对象中。
- isMiniProgram: 检测是不是运转于微信小递次环境中。
- isMobile: 运用 ua 检测是不是运转于挪动端浏览器。
- isNaN: 检测值是不是是 NaN。
- isNative: 搜检值是不是是原生函数。
- isNil: 搜检值是不是是 null 或 undefined,等价于 value == null。
- isNode: 检测是不是运转于 node 环境中。
- isNull: 搜检值是不是是 Null 范例。
- isNum: 检测值是不是是数字范例。
- isNumeric: 搜检值是不是是数字,包括数字字符串。
- isObj: 搜检值是不是是对象。
- isOdd: 搜检数字是不是是奇数。
- isPlainObj: 搜检值是不是是用 Object 组织函数建立的对象。
- isPrime: 搜检整数是不是是质数。
- isPrimitive: 检测值是不是是字符串,数字,布尔值或 null。
- isPromise: 搜检值是不是是类 promise 对象。
- isRegExp: 搜检值是不是是正则范例。
- isRelative: 搜检途径是不是是相对途径。
- isSet: 搜检值是不是是 Set 范例。
- isSorted: 搜检数组是不是有序。
- isStr: 搜检值是不是是字符串。
- isTypedArr: 搜检值是不是 TypedArray 范例。
- isUndef: 搜检值是不是是 undefined。
- isUrl: 简朴搜检值是不是是有用的 url 地点。
- isWeakMap: 搜检值是不是是 WeakMap 范例。
- isWeakSet: 搜检值是不是是 WeakSet 范例。
- kebabCase: 将字符串转换为短横线式。
- keyCode: 键码键名转换。
- keys: 返回包括对象本身可遍历一切键名的数组。
- last: 猎取数组的末了一个元素。
- linkify: 将文本中的 url 地点转换为超链接。
- longest: 猎取数组中最长的一项。
- lowerCase: 转换字符串为小写。
- lpad: 对字符串举行左添补。
- ltrim: 删除字符串头部指定字符或空格。
- map: 对鸠合的每一个元素挪用转换函数天生与之对应的数组。
- mapObj: 类似 map,但针对对象,天生一个新对象。
- matcher: 传入对象返回函数,假如传入参数中包括该对象则返回真。
- max: 猎取数字中的最大值。
- md5: MD5 算法完成。
- memStorage: Web Storage 接口的纯内存完成。
- memoize: 缓存函数盘算效果。
- mergeSort: 合并排序完成。
- methods: 猎取对象中一切要领名。
- min: 猎取数字中的最小值。
- moment: 简朴的类 moment.js 完成。
- ms: 时长字符串与毫秒转换库。
- negate: 建立一个将原函数效果取反的函数。
- nextTick: 可以同时运转在 node 和浏览器端的 next tick 完成。
- noop: 一个什么也不做的空函数。
- normalizeHeader: 标准化 HTTP 头部名。
- normalizePath: 标准化文件途径中的斜杠。
- now: 猎取当前时候戳。
- objToStr: Object.prototype.toString 的别号。
- omit: 类似 pick,但效果相反。
- once: 建立只能挪用一次的函数。
- optimizeCb: 用于高效的函数上下文绑定。
- pad: 对字符串举行摆布添补。
- pairs: 将对象转换为包括【键名,键值】对的数组。
- parallel: 同时实行多个函数。
- parseArgs: 命令行参数简朴剖析。
- partial: 返回部份添补参数的函数,与 bind 模块类似。
- pascalCase: 将字符串转换为帕斯卡式。
- perfNow: 高精度时候戳。
- pick: 过滤对象。
- pluck: 提取数组对象中指定属性值,返回一个数组。
- precision: 猎取数字的精度。
- promisify: 转换运用回调的异步函数,使其返回 Promise。
- property: 返回一个函数,该函数返回任何传入对象的指定属性。
- query: 剖析序列化 url 的 query 部份。
- quickSort: 快排完成。
- raf: requestAnimationFrame 快捷体式格局。
- random: 在给定区间内天生随机数。
- randomItem: 随机猎取数组中的某项。
- range: 建立整数数组。
- rc4: RC4 对称加密算法完成。
- reduce: 兼并多个值成一个值。
- reduceRight: 类似于 reduce,只是从后往前兼并。
- reject: 类似 filter,但效果相反。
- remove: 移除鸠合中一切经由过程真值检测的元素,返回包括一切删除元素的数组。
- repeat: 反复字符串指定次数。
- restArgs: 将给定序号后的参数兼并成一个数组。
- rgbToHsl: 将 rgb 花样的色彩值转换为 hsl 花样。
- root: 根对象援用,关于 nodeJs,取
global
对象,关于浏览器,取window
对象。 - rpad: 对字符串举行右添补。
- rtrim: 删除字符串尾部指定字符或空格。
- safeCb: 建立回调函数,内部模块运用。
- safeDel: 删除对象属性。
- safeGet: 猎取对象属性值,途径不存在时不报错。
- safeSet: 设置对象属性值。
- sample: 从鸠合中随机抽取部份样本。
- selectionSort: 挑选排序完成。
- shuffle: 将数组中元素的递次打乱。
- size: 猎取对象的大小或类数组元素的长度。
- sleep: 运用 Promise 模仿停息要领。
- slice: 截取数组的一部份天生新数组。
- snakeCase: 转换字符串为下划线式。
- some: 搜检鸠合中是不是有元素经由过程真值检测。
- sortBy: 遍历鸠合中的元素,将其作为参数挪用函数,并以获得的效果为根据对数组举行排序。
- spaceCase: 将字符串转换为空花样。
- splitCase: 将不同定名式的字符串拆分成数组。
- splitPath: 将途径拆分为文件夹途径,文件名和扩大名。
- startWith: 搜检字符串是不是以指定字符串开首。
- strHash: 运用 djb2 算法举行字符串哈希。
- strToBytes: 将字符串转换为字节数组。
- stringify: JSON 序列化,支撑轮回援用和函数。
- stripAnsi: 消灭字符串中的 ansi 掌握码。
- stripCmt: 消灭源码中的解释。
- stripColor: 消灭字符串中的 ansi 色彩掌握码。
- stripHtmlTag: 消灭字符串中的 html 标签。
- sum: 盘算数字和。
- swap: 交流数组中的两项。
- template: 将模板字符串编译成函数用于衬着。
- throttle: 返回函数的节流阀版本。
- timeAgo: 将时候花样化成多久之前的情势。
- timeTaken: 猎取函数的实行时候。
- times: 挪用目的函数 n 次。
- toArr: 将恣意值转换为数组。
- toBool: 将恣意值转换为布尔值。
- toDate: 将恣意值转换为日期范例。
- toInt: 将恣意值转换为整数。
- toNum: 将恣意值转换为数字。
- toSrc: 将函数转换为源码。
- toStr: 将恣意值转换为字符串。
- topoSort: 拓扑排序完成。
- trim: 删除字符串双方指定字符或空格。
- tryIt: 在 try catch 块中运转函数。
- type: 猎取 JavaScript 对象的内部范例。
- types: 仅用于天生 ts 定义文件。
- ucs2: UCS-2 编解码。
- unescape: 和 escape 相反,转义 HTML 实体归去。
- union: 返回传入一切数组的并集。
- uniqId: 天生全局唯一 id。
- unique: 返回数组去重后的副本。
- unzip: 与 zip 相反。
- upperCase: 转换字符串为大写。
- upperFirst: 将字符串的第一个字符转换为大写。
- use: 运用 define 建立的模块。
- utf8: UTF-8 编解码。
- values: 返回对象一切的属性值。
- vlq: vlq 编解码。
- waitUntil: 守候直到前提函数返回真值。
- waterfall: 按递次实行函数序列。
- wrap: 将函数封装到包裹函数内里, 并把它作为第一个参数传给包裹函数。
- wx: 小递次 wx 对象的 promise 版本。
- zip: 将每一个数组中响应位置的值兼并在一起。