沉冰浮水 2022-09-02 13:52 采纳率: 0%
浏览 116
已结题

pnpm 下依赖项目真实路径的问题

问题遇到的现象和发生背景

一个 rollup.js 的插件,开启一个 web 服务然后返回 livereload.js;

插件另外依赖于 livereload-js;

cnpm 安装后功能正常,pnpm 则找不到文件;

补充:最终项目 A 依赖 rollup-plugin-monkeyrollup-plugin-monkey 依赖 livereload-js,而我是 rollup-plugin-monkey 的作者;

问题相关代码,请勿粘贴截图
// 路径获取
import path from 'path'
import { fileURLToPath } from 'url'

const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)

const monkeyPath = {
    base: path.resolve(__dirname, "../"),
    // 这里如何通用的获取真实路径
    liveJS: path.resolve(__dirname, "../node_modules/livereload-js/dist/livereload.js"),
}

// 路由
server.get('/livereload.js', function (req, reply) {
    // console.log(monkeyPath.liveJS)
    // reply.type('text/javascript').sendFile('livereload.js', monkeyPath.livePath)
    fs.readFile(monkeyPath.liveJS, (err, fileBuffer) => {
        reply.type('text/javascript').send(err || fileBuffer)
    })
})

我的解答思路和尝试过的方法

NodeProject/node_modules/rollup-plugin-monkey/dist/index.mjs

NodeProject/node_modules/rollup-plugin-monkey/node_modules/livereload-js/dist/livereload.js ← pnpm 安装并不存在这个路径

  • 写回答

2条回答 默认 最新

  • 沉冰浮水 2022-09-02 20:03
    关注

    自己找到解决了:

    cjs 中可以直接用 require.resolve,mjs 则需要绕点儿路用createRequire

    Modules: node:module API | Node.js v18.8.0 Documentation
    https://nodejs.org/api/module.html#modulecreaterequirefilename

    
    import path from 'path'
    import { fileURLToPath } from 'url'
    import { createRequire } from 'node:module'
    
    const __filename = fileURLToPath(import.meta.url)
    const __dirname = path.dirname(__filename)
    const require = createRequire(import.meta.url)
    
    const monkeyPath = {
      base: path.resolve(__dirname, '../'),
      liveJS: require.resolve('livereload-js'),
    }
    
    评论

报告相同问题?

问题事件

  • 系统已结题 9月10日
  • 修改了问题 9月2日
  • 创建了问题 9月2日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 易优eyoucms关于二级栏目调用的问题
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题