Skip to content

Commit 9e4d03e

Browse files
committed
feat(node): add projectRoot and resolvePath utilities
- Introduce `projectRoot` constant to get the project root path at runtime - Add `resolvePath` function to resolve relative paths based on project root - Update documentation and API references for the new Node.js path utilities - Refactor build config to use shared utilities from `src/node` - Improve build hook with async/await and error handling - Update docs package.json scripts to include update step during dev build
1 parent adb7c79 commit 9e4d03e

File tree

9 files changed

+89
-15
lines changed

9 files changed

+89
-15
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ Below are the module categories available in the utility library:
7878
| [Finance](https://utils.ryanuo.cc/api/finance/) | [formatCurrency()](https://utils.ryanuo.cc/api/finance/functions/formatCurrency.html)[calculatePercentage()](https://utils.ryanuo.cc/api/finance/functions/calculatePercentage.html)[compare()](https://utils.ryanuo.cc/api/finance/functions/compare.html)[preciseAdd()](https://utils.ryanuo.cc/api/finance/functions/preciseAdd.html)[preciseDiv()](https://utils.ryanuo.cc/api/finance/functions/preciseDiv.html)[preciseMul()](https://utils.ryanuo.cc/api/finance/functions/preciseMul.html)[preciseSub()](https://utils.ryanuo.cc/api/finance/functions/preciseSub.html)[roundTo()](https://utils.ryanuo.cc/api/finance/functions/roundTo.html)[decimal()](https://utils.ryanuo.cc/api/finance/variables/decimal.html) |
7979
| [Graphics](https://utils.ryanuo.cc/api/graphics/) | [hexToRgba()](https://utils.ryanuo.cc/api/graphics/functions/hexToRgba.html)[lerpColor()](https://utils.ryanuo.cc/api/graphics/functions/lerpColor.html)[rgbaToHex()](https://utils.ryanuo.cc/api/graphics/functions/rgbaToHex.html) |
8080
| [Network](https://utils.ryanuo.cc/api/network/) | [checkNetworkStatus()](https://utils.ryanuo.cc/api/network/functions/checkNetworkStatus.html)[fetchWithTimeout()](https://utils.ryanuo.cc/api/network/functions/fetchWithTimeout.html)[getClientIP()](https://utils.ryanuo.cc/api/network/functions/getClientIP.html)[getIndexedDBCache()](https://utils.ryanuo.cc/api/network/functions/getIndexedDBCache.html)[parallelRequests()](https://utils.ryanuo.cc/api/network/functions/parallelRequests.html)[request()](https://utils.ryanuo.cc/api/network/functions/request.html) |
81-
| [Node](https://utils.ryanuo.cc/api/node/) | [logger()](https://utils.ryanuo.cc/api/node/variables/logger.html)[mkdirp()](https://utils.ryanuo.cc/api/node/functions/mkdirp.html)[rmrf()](https://utils.ryanuo.cc/api/node/functions/rmrf.html) |
81+
| [Node](https://utils.ryanuo.cc/api/node/) | [logger()](https://utils.ryanuo.cc/api/node/variables/logger.html)[projectRoot()](https://utils.ryanuo.cc/api/node/variables/projectRoot.html)[mkdirp()](https://utils.ryanuo.cc/api/node/functions/mkdirp.html)[resolvePath()](https://utils.ryanuo.cc/api/node/functions/resolvePath.html)[rmrf()](https://utils.ryanuo.cc/api/node/functions/rmrf.html) |
8282
<!-- auto utils end -->
8383

8484
## How to development

build.config.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
import { execSync } from 'node:child_process'
2-
import { rm } from 'node:fs'
32
import { dirname, resolve } from 'node:path'
43
import { fileURLToPath } from 'node:url'
54
import { defineBuildConfig } from 'unbuild'
65
import generateEntries from './script/generateEntries'
76
import updatePackageExports from './script/update-package-exports'
8-
9-
const __dirname = dirname(fileURLToPath(import.meta.url))
10-
const resolvePath = (p: string) => resolve(__dirname, p)
7+
import { resolvePath, rmrf } from './src/node'
118

129
export default defineBuildConfig({
1310
entries: [
@@ -29,15 +26,17 @@ export default defineBuildConfig({
2926
},
3027
},
3128
hooks: {
32-
'build:prepare': () => {
33-
rm(resolvePath('dist'), () => {
34-
execSync('tsc -p tsconfig.build.json', {
35-
stdio: 'inherit',
36-
})
29+
'build:prepare': async () => {
30+
try {
31+
await rmrf(resolvePath('dist'))
32+
execSync('tsc -p tsconfig.build.json', { stdio: 'inherit' })
3733
console.warn('🎉 类型文件生成完成!')
3834

3935
updatePackageExports(resolvePath('src'), resolvePath('package.json'))
40-
})
36+
}
37+
catch (err) {
38+
console.error('❌ build:prepare 失败:', err)
39+
}
4140
},
4241
},
4342
})
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
[@ryanuo/utils](../../index.md) / [node](../index.md) / resolvePath
2+
3+
# Function: resolvePath()
4+
5+
```ts
6+
function resolvePath(p): string;
7+
```
8+
9+
将相对路径解析为基于当前模块的绝对路径
10+
11+
## Parameters
12+
13+
### p
14+
15+
`string`
16+
17+
相对路径
18+
19+
## Returns
20+
21+
`string`

docs/api/node/index.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212

1313
## Path
1414

15-
| Function | Description |
15+
| Name | Description |
1616
| ------ | ------ |
17+
| [projectRoot](variables/projectRoot.md) | 项目根路径工具,运行时获取项目根路径 |
1718
| [mkdirp](functions/mkdirp.md) | 递归创建目录(如果不存在) 确保指定路径及其所有父目录存在。如果目录已经存在,不会报错。 |
19+
| [resolvePath](functions/resolvePath.md) | 将相对路径解析为基于当前模块的绝对路径 |
1820
| [rmrf](functions/rmrf.md) | 递归删除目录或文件 这个函数会删除指定路径下的文件或目录及其所有子内容。 如果路径不存在,也不会报错。 |
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
[@ryanuo/utils](../../index.md) / [node](../index.md) / projectRoot
2+
3+
# Variable: projectRoot
4+
5+
```ts
6+
const projectRoot: string;
7+
```
8+
9+
项目根路径工具,运行时获取项目根路径
10+
11+
## Example
12+
13+
```ts
14+
// 运行时获取项目根路径 process.cwd()
15+
// 每个模块计算出来的 __dirname 都是 当前模块的目录。
16+
const __dirname = dirname(fileURLToPath(import.meta.url))
17+
const resolvePath = (p: string) => resolve(__dirname, p)
18+
```

docs/api/typedoc-sidebar.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
[{ "text": "ai", "link": "/api/ai/", "collapsed": true, "items": [{ "text": "MachineLearning", "collapsed": true, "items": [{ "text": "linearRegression", "link": "/api/ai/functions/linearRegression.md" }, { "text": "normalizeData", "link": "/api/ai/functions/normalizeData.md" }, { "text": "normalizeMinMax", "link": "/api/ai/functions/normalizeMinMax.md" }] }] }, { "text": "algorithm", "link": "/api/algorithm/", "collapsed": true, "items": [{ "text": "Algorithm", "collapsed": true, "items": [{ "text": "binarySearch", "link": "/api/algorithm/functions/binarySearch.md" }, { "text": "bubbleSort", "link": "/api/algorithm/functions/bubbleSort.md" }, { "text": "fibonacciDP", "link": "/api/algorithm/functions/fibonacciDP.md" }, { "text": "fibonacciRecursive", "link": "/api/algorithm/functions/fibonacciRecursive.md" }, { "text": "isPrime", "link": "/api/algorithm/functions/isPrime.md" }, { "text": "quickSort", "link": "/api/algorithm/functions/quickSort.md" }] }] }, { "text": "browser", "link": "/api/browser/", "collapsed": true, "items": [{ "text": "DOM", "collapsed": true, "items": [{ "text": "copyToClipboard", "link": "/api/browser/functions/copyToClipboard.md" }, { "text": "enterFullScreen", "link": "/api/browser/functions/enterFullScreen.md" }, { "text": "isMobile", "link": "/api/browser/functions/isMobile.md" }, { "text": "manageClasses", "link": "/api/browser/functions/manageClasses.md" }, { "text": "onceEventListener", "link": "/api/browser/functions/onceEventListener.md" }] }, { "text": "Download", "collapsed": true, "items": [{ "text": "downloadFile", "link": "/api/browser/functions/downloadFile.md" }] }, { "text": "SafeStorage", "collapsed": true, "items": [{ "text": "SafeStorage", "link": "/api/browser/interfaces/SafeStorage.md" }, { "text": "StorageOptions", "link": "/api/browser/interfaces/StorageOptions.md" }, { "text": "safeStorage", "link": "/api/browser/variables/safeStorage.md" }] }, { "text": "URL", "collapsed": true, "items": [{ "text": "getUrlParams", "link": "/api/browser/functions/getUrlParams.md" }, { "text": "getUrlParamsString", "link": "/api/browser/functions/getUrlParamsString.md" }] }] }, { "text": "common", "link": "/api/common/", "collapsed": true, "items": [{ "text": "Date", "collapsed": true, "items": [{ "text": "dateFormat", "link": "/api/common/functions/dateFormat.md" }] }, { "text": "Other", "collapsed": true, "items": [{ "text": "dayjs", "link": "/api/common/variables/dayjs.md" }, { "text": "curry", "link": "/api/common/functions/curry.md" }, { "text": "debounce", "link": "/api/common/functions/debounce.md" }, { "text": "getUuid", "link": "/api/common/functions/getUuid.md" }, { "text": "safeJSONParse", "link": "/api/common/functions/safeJSONParse.md" }, { "text": "throttle", "link": "/api/common/functions/throttle.md" }] }, { "text": "compress", "collapsed": true, "items": [{ "text": "compress", "link": "/api/common/functions/compress.md" }, { "text": "decompress", "link": "/api/common/functions/decompress.md" }] }, { "text": "crypto", "collapsed": true, "items": [{ "text": "decrypt", "link": "/api/common/functions/decrypt.md" }, { "text": "encrypt", "link": "/api/common/functions/encrypt.md" }, { "text": "xor", "link": "/api/common/functions/xor.md" }] }, { "text": "is", "collapsed": true, "items": [{ "text": "isBoolean", "link": "/api/common/functions/isBoolean.md" }, { "text": "isBrowser", "link": "/api/common/functions/isBrowser.md" }, { "text": "isDate", "link": "/api/common/functions/isDate.md" }, { "text": "isEmptyObject", "link": "/api/common/functions/isEmptyObject.md" }, { "text": "isFunction", "link": "/api/common/functions/isFunction.md" }, { "text": "isNull", "link": "/api/common/functions/isNull.md" }, { "text": "isNumber", "link": "/api/common/functions/isNumber.md" }, { "text": "isObject", "link": "/api/common/functions/isObject.md" }, { "text": "isRegExp", "link": "/api/common/functions/isRegExp.md" }, { "text": "isString", "link": "/api/common/functions/isString.md" }, { "text": "isUndefined", "link": "/api/common/functions/isUndefined.md" }] }, { "text": "type", "collapsed": true, "items": [{ "text": "deepClone", "link": "/api/common/functions/deepClone.md" }, { "text": "getTypeName", "link": "/api/common/functions/getTypeName.md" }, { "text": "numberToFixed", "link": "/api/common/functions/numberToFixed.md" }, { "text": "toString", "link": "/api/common/functions/toString.md" }] }] }, { "text": "finance", "link": "/api/finance/", "collapsed": true, "items": [{ "text": "Amount", "collapsed": true, "items": [{ "text": "formatCurrency", "link": "/api/finance/functions/formatCurrency.md" }] }, { "text": "Calculator", "collapsed": true, "items": [{ "text": "CalculatorChain", "link": "/api/finance/classes/CalculatorChain.md" }, { "text": "calculatePercentage", "link": "/api/finance/functions/calculatePercentage.md" }, { "text": "compare", "link": "/api/finance/functions/compare.md" }, { "text": "preciseAdd", "link": "/api/finance/functions/preciseAdd.md" }, { "text": "preciseDiv", "link": "/api/finance/functions/preciseDiv.md" }, { "text": "preciseMul", "link": "/api/finance/functions/preciseMul.md" }, { "text": "preciseSub", "link": "/api/finance/functions/preciseSub.md" }, { "text": "roundTo", "link": "/api/finance/functions/roundTo.md" }] }, { "text": "Other", "collapsed": true, "items": [{ "text": "decimal", "link": "/api/finance/variables/decimal.md" }] }] }, { "text": "graphics", "link": "/api/graphics/", "collapsed": true, "items": [{ "text": "Color", "collapsed": true, "items": [{ "text": "hexToRgba", "link": "/api/graphics/functions/hexToRgba.md" }, { "text": "lerpColor", "link": "/api/graphics/functions/lerpColor.md" }, { "text": "rgbaToHex", "link": "/api/graphics/functions/rgbaToHex.md" }] }] }, { "text": "network", "link": "/api/network/", "collapsed": true, "items": [{ "text": "Http", "collapsed": true, "items": [{ "text": "checkNetworkStatus", "link": "/api/network/functions/checkNetworkStatus.md" }, { "text": "fetchWithTimeout", "link": "/api/network/functions/fetchWithTimeout.md" }, { "text": "getClientIP", "link": "/api/network/functions/getClientIP.md" }, { "text": "getIndexedDBCache", "link": "/api/network/functions/getIndexedDBCache.md" }, { "text": "parallelRequests", "link": "/api/network/functions/parallelRequests.md" }, { "text": "request", "link": "/api/network/functions/request.md" }] }] }, { "text": "node", "link": "/api/node/", "collapsed": true, "items": [{ "text": "Other", "collapsed": true, "items": [{ "text": "logger", "link": "/api/node/variables/logger.md" }] }, { "text": "Path", "collapsed": true, "items": [{ "text": "mkdirp", "link": "/api/node/functions/mkdirp.md" }, { "text": "rmrf", "link": "/api/node/functions/rmrf.md" }] }] }]
1+
[{ "text": "ai", "link": "/api/ai/", "collapsed": true, "items": [{ "text": "MachineLearning", "collapsed": true, "items": [{ "text": "linearRegression", "link": "/api/ai/functions/linearRegression.md" }, { "text": "normalizeData", "link": "/api/ai/functions/normalizeData.md" }, { "text": "normalizeMinMax", "link": "/api/ai/functions/normalizeMinMax.md" }] }] }, { "text": "algorithm", "link": "/api/algorithm/", "collapsed": true, "items": [{ "text": "Algorithm", "collapsed": true, "items": [{ "text": "binarySearch", "link": "/api/algorithm/functions/binarySearch.md" }, { "text": "bubbleSort", "link": "/api/algorithm/functions/bubbleSort.md" }, { "text": "fibonacciDP", "link": "/api/algorithm/functions/fibonacciDP.md" }, { "text": "fibonacciRecursive", "link": "/api/algorithm/functions/fibonacciRecursive.md" }, { "text": "isPrime", "link": "/api/algorithm/functions/isPrime.md" }, { "text": "quickSort", "link": "/api/algorithm/functions/quickSort.md" }] }] }, { "text": "browser", "link": "/api/browser/", "collapsed": true, "items": [{ "text": "DOM", "collapsed": true, "items": [{ "text": "copyToClipboard", "link": "/api/browser/functions/copyToClipboard.md" }, { "text": "enterFullScreen", "link": "/api/browser/functions/enterFullScreen.md" }, { "text": "isMobile", "link": "/api/browser/functions/isMobile.md" }, { "text": "manageClasses", "link": "/api/browser/functions/manageClasses.md" }, { "text": "onceEventListener", "link": "/api/browser/functions/onceEventListener.md" }] }, { "text": "Download", "collapsed": true, "items": [{ "text": "downloadFile", "link": "/api/browser/functions/downloadFile.md" }] }, { "text": "SafeStorage", "collapsed": true, "items": [{ "text": "SafeStorage", "link": "/api/browser/interfaces/SafeStorage.md" }, { "text": "StorageOptions", "link": "/api/browser/interfaces/StorageOptions.md" }, { "text": "safeStorage", "link": "/api/browser/variables/safeStorage.md" }] }, { "text": "URL", "collapsed": true, "items": [{ "text": "getUrlParams", "link": "/api/browser/functions/getUrlParams.md" }, { "text": "getUrlParamsString", "link": "/api/browser/functions/getUrlParamsString.md" }] }] }, { "text": "common", "link": "/api/common/", "collapsed": true, "items": [{ "text": "Date", "collapsed": true, "items": [{ "text": "dateFormat", "link": "/api/common/functions/dateFormat.md" }] }, { "text": "Other", "collapsed": true, "items": [{ "text": "dayjs", "link": "/api/common/variables/dayjs.md" }, { "text": "curry", "link": "/api/common/functions/curry.md" }, { "text": "debounce", "link": "/api/common/functions/debounce.md" }, { "text": "getUuid", "link": "/api/common/functions/getUuid.md" }, { "text": "safeJSONParse", "link": "/api/common/functions/safeJSONParse.md" }, { "text": "throttle", "link": "/api/common/functions/throttle.md" }] }, { "text": "compress", "collapsed": true, "items": [{ "text": "compress", "link": "/api/common/functions/compress.md" }, { "text": "decompress", "link": "/api/common/functions/decompress.md" }] }, { "text": "crypto", "collapsed": true, "items": [{ "text": "decrypt", "link": "/api/common/functions/decrypt.md" }, { "text": "encrypt", "link": "/api/common/functions/encrypt.md" }, { "text": "xor", "link": "/api/common/functions/xor.md" }] }, { "text": "is", "collapsed": true, "items": [{ "text": "isBoolean", "link": "/api/common/functions/isBoolean.md" }, { "text": "isBrowser", "link": "/api/common/functions/isBrowser.md" }, { "text": "isDate", "link": "/api/common/functions/isDate.md" }, { "text": "isEmptyObject", "link": "/api/common/functions/isEmptyObject.md" }, { "text": "isFunction", "link": "/api/common/functions/isFunction.md" }, { "text": "isNull", "link": "/api/common/functions/isNull.md" }, { "text": "isNumber", "link": "/api/common/functions/isNumber.md" }, { "text": "isObject", "link": "/api/common/functions/isObject.md" }, { "text": "isRegExp", "link": "/api/common/functions/isRegExp.md" }, { "text": "isString", "link": "/api/common/functions/isString.md" }, { "text": "isUndefined", "link": "/api/common/functions/isUndefined.md" }] }, { "text": "type", "collapsed": true, "items": [{ "text": "deepClone", "link": "/api/common/functions/deepClone.md" }, { "text": "getTypeName", "link": "/api/common/functions/getTypeName.md" }, { "text": "numberToFixed", "link": "/api/common/functions/numberToFixed.md" }, { "text": "toString", "link": "/api/common/functions/toString.md" }] }] }, { "text": "finance", "link": "/api/finance/", "collapsed": true, "items": [{ "text": "Amount", "collapsed": true, "items": [{ "text": "formatCurrency", "link": "/api/finance/functions/formatCurrency.md" }] }, { "text": "Calculator", "collapsed": true, "items": [{ "text": "CalculatorChain", "link": "/api/finance/classes/CalculatorChain.md" }, { "text": "calculatePercentage", "link": "/api/finance/functions/calculatePercentage.md" }, { "text": "compare", "link": "/api/finance/functions/compare.md" }, { "text": "preciseAdd", "link": "/api/finance/functions/preciseAdd.md" }, { "text": "preciseDiv", "link": "/api/finance/functions/preciseDiv.md" }, { "text": "preciseMul", "link": "/api/finance/functions/preciseMul.md" }, { "text": "preciseSub", "link": "/api/finance/functions/preciseSub.md" }, { "text": "roundTo", "link": "/api/finance/functions/roundTo.md" }] }, { "text": "Other", "collapsed": true, "items": [{ "text": "decimal", "link": "/api/finance/variables/decimal.md" }] }] }, { "text": "graphics", "link": "/api/graphics/", "collapsed": true, "items": [{ "text": "Color", "collapsed": true, "items": [{ "text": "hexToRgba", "link": "/api/graphics/functions/hexToRgba.md" }, { "text": "lerpColor", "link": "/api/graphics/functions/lerpColor.md" }, { "text": "rgbaToHex", "link": "/api/graphics/functions/rgbaToHex.md" }] }] }, { "text": "network", "link": "/api/network/", "collapsed": true, "items": [{ "text": "Http", "collapsed": true, "items": [{ "text": "checkNetworkStatus", "link": "/api/network/functions/checkNetworkStatus.md" }, { "text": "fetchWithTimeout", "link": "/api/network/functions/fetchWithTimeout.md" }, { "text": "getClientIP", "link": "/api/network/functions/getClientIP.md" }, { "text": "getIndexedDBCache", "link": "/api/network/functions/getIndexedDBCache.md" }, { "text": "parallelRequests", "link": "/api/network/functions/parallelRequests.md" }, { "text": "request", "link": "/api/network/functions/request.md" }] }] }, { "text": "node", "link": "/api/node/", "collapsed": true, "items": [{ "text": "Other", "collapsed": true, "items": [{ "text": "logger", "link": "/api/node/variables/logger.md" }] }, { "text": "Path", "collapsed": true, "items": [{ "text": "projectRoot", "link": "/api/node/variables/projectRoot.md" }, { "text": "mkdirp", "link": "/api/node/functions/mkdirp.md" }, { "text": "resolvePath", "link": "/api/node/functions/resolvePath.md" }, { "text": "rmrf", "link": "/api/node/functions/rmrf.md" }] }] }]

0 commit comments

Comments
 (0)