JasKang / vite-plugin-markdown-preview

在 markdown 中书写 vue demo,支持 vite/vitepress。

Home Page:https://markdown-preview.jaskang.vip

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

substr 截取路径导致的 bug

yeojongki opened this issue · comments

关于 plugin.tsresolveIdtransformload 这几个方法获取路径疑问

  1. resolveId
  2. load
  3. transform

为什么要截取路径 (即substr(1)),是有什么特殊情况?我创建了一个 monorepo 项目,发现会有bug,目录结构如下:

lerna-vite-test
├── docs ------------------------------ vite 项目
│ ├── index.html
│ ├── package.json
│ ├── public
│ │ └── favicon.ico
│ ├── README.md
│ ├── src
│ │ ├── App.tsx --------------------- 在这里引入了 packages 目录下的文件
│ │ ├── assets
│ │ ├── components
│ │ ├── main.ts
│ │ └── shims-vue.d.ts
│ ├── tsconfig.json
│ ├── vite.config.ts
│ └── yarn.lock
├── lerna.json
├── package.json
├── packages ------------------------ 存放 md 项目位置
│ └── button
│ ├── package.json
│ └── src
└── yarn.lock

调试过后发现是路径有误:

  1. 原本的路径是 D:/XXX,
  2. 经过 substr 后变成 :/XXX,少了 盘符D
  3. 拼接后这个路径肯定是有问题的 (path.join(config.root, id.substr(1))

复现 repo: https://github.com/yeojongki/lerna-vite-docs-issue
注:我的环境是 windows

我的解决方法:将 resolveIdtransformload 这几个方法获取路径相关地方不用 substr 拼接,使用原路径即可

针对 windows 环境下的路径转换确实还需要进一步处理
不过你这里的问题在于 vite 有个 root 目录, 默认是 cwd ,模块解析都是相对于这个 root 目录的。而你的 md 文件并不在 vite 执行目录中,这样还是会有问题的

@JasKang 那目前来说是解析不了非 root 目录的文件吗?