You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在任意目录脚本中获取其他任意文件对应的Node包搜索路径

解决方案

最优实现方案(基于Node官方公开API)

无需手动实现路径逻辑,也无需跨目录执行脚本,直接使用Node内置的createRequireAPI即可生成对应目录的模块搜索路径,输出结果与在目标目录下直接执行原生require.resolve.paths的结果完全一致,支持Node v12.2.0及以上版本。

代码示例

import { createRequire } from 'module'
import * as path from 'path'

// 替换为y.ts实际所在的绝对目录路径
const yFileDir = path.resolve('/path/to/directory-of-y-ts')
// 构造以y.ts所在目录为基准的require函数
const requireFromYDir = createRequire(path.join(yFileDir, 'entry.js'))
// 直接获取y.ts对应的完整Node模块搜索路径
const yModuleSearchPaths = requireFromYDir.resolve.paths('')

// 打印验证结果
console.log(JSON.stringify(yModuleSearchPaths, null, 2))

低版本Node兼容方案

如果使用的Node版本低于v12.2.0,可以调用Node内置module模块的内部方法实现,该逻辑为Node模块系统原生使用的路径生成逻辑,兼容性覆盖所有主流Node版本:

import * as path from 'path'
import { Module } from 'module'

const yFileDir = path.resolve('/path/to/directory-of-y-ts')
// 生成目标目录对应的逐级node_modules搜索路径
const localSearchPaths = Module._nodeModulePaths(yFileDir)
// 拼接全局模块搜索路径,与原生逻辑对齐
const fullSearchPaths = localSearchPaths.concat(Module.globalPaths)

console.log(JSON.stringify(fullSearchPaths, null, 2))

注意事项

  • TypeScript环境下需要提前安装@types/node依赖获取类型定义,避免类型报错
  • 如果y.ts路径是动态获取的,只需要调用path.dirname(yTsAbsolutePath)即可拿到y.ts的目录路径传入上述代码

内容的提问来源于stack exchange,提问作者Craig Hicks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 14:24:04