Table of Contents
打包
最近把自己的库整理了一下,改成用rollup
打包。本来是自己看文档折腾rollup
配置的,虽然打包文件出来了,也能用,但babel
会提示缺少_typeof
之类的,所以后来还是到网上找了一份配置。找的配置地址如下:
我只留下了打包相关的:start
和build
命令涉及到的配置和包。
文档生成
用的jsdoc
来生成文档。具体配置官网有,这里只贴一下我用到的。
// package.json …… "scripts": { "docs": "jsdoc -c jsdoc.json" } // 需要安装两个包:"jsdoc": "^3.6.4", "jsdoc-babel": "^0.5.0", …… // jsdoc.json { "plugins": ["node_modules/jsdoc-babel"], "source": { "include": ["src"], "exclude": [], "includePattern": ".+\\.js(doc)?$", "excludePattern": "(^|\\/|\\\\)_" }, "opts": { "encoding": "utf8", "destination": "./docs/", // 文档目录 "recurse": true } } // xxx.js--代码文件类似下面这样的注释 /** * 数组相关方法 * @module array */ /** * 填充数组--返回值是原数组 * @memberOf module:array * @param {Array} arr // 要填充的数组 * @param {*} value // 要填充的值 * @param {number} start // 开始填充位置,可选,默认0 * @param {number} end // 结束填充位置,可选,默认最后一个元素 * @param {boolean} replace // 是否替换现有值,可选,默认不替换 */ export function fill(arr, value, start, end, replace) { if (!isArray(arr)) { error('函数 fill 第一个参数必须是数组') } const s = isNumber(start) ? start : 0 const e = isNumber(end) ? end : arr.length for (let i = s, len = e; i < len; i++) { // 如果元素未定义或为空或可以替换,则填充指定值 if (isNull(arr[i]) || isUndefined(arr[i]) || replace) { arr[i] = value } } return arr } ……
然后运行npm run docs
就可以了。(运行之前手动删除一下文档生成目录下的文件,我还没找到自动删除文件的插件)
单元测试
用
mocha
、jest
之类的测试工具就不要看了,我这里总是报错,所以直接用的chai
断言库+手写测试文件。
项目新建test
文件夹,测试用例写在这里面。(windows 下 tree 命令可以生成目录树)
// 目录 /test │ index.html └─js ├─lib │ chai.js │ lodash.js │ tool.js └─testScript array.fill.js array.sort.js
// index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>xxx.js测试</title> <script src=".././dist/index.js"></script> <script src="./js/lib/tool.js"></script> <script src="./js/lib/chai.js"></script> <script src='./js/lib/lodash.js'></script> </head> <body> <div id="container"></div> <script src="./js/testScript/array.fill.js"></script> <!-- <script src="./js/testScript/array.sort.js"></script> --> </body> </html>
// test/js/lib/tool.js /** * 测试函数 * @param {string} describe 描述 * @param {Function} func 要执行的测试函数 * @param {*} expect 结果 */ function test(describe, func) { let s = Date.now() let success = true let res = null try { res = func() } catch (e) { res = e success = false } let color = res && success ? 'color: lightGreen;' : 'color: red;' let str = `%c ${describe}: ${success}, time: ${Date.now() - s}ms` console.log(str, color) if (!success) { console.error(res) } }
// test/js/lib/test/array.fill.js (() => { const T = tinyUtil /** * 测试数组 fill */ test('数组填充-参数检查', () => { const _ = () => { return T.array.fill() } return chai.expect(_).to.throw() }) test('数组填充-不替换', () => { const _ = () => { return T.array.fill([1, 2, 3, null, ,], 1) } return chai.expect(_()).to.deep.equal([1, 2, 3, 1, 1]) }) test('数组填充-替换', () => { const _ = () => { return T.array.fill([1, 2, 3, 4, null], 1, null, null, true) } return chai.expect(_()).to.deep.equal([1, 1, 1, 1, 1]) }) test('数组填充-补充不足的元素', () => { const _ = () => { return T.array.fill([1], 1, null, 5, true) } return chai.expect(_()).to.deep.equal([1, 1, 1, 1, 1]) }) })()
然后,浏览器打开index.html
文件,控制台就有结果了。