substr 截取路径导致的 bug
yeojongki opened this issue · comments
关于 plugin.ts
中 resolveId
、transform
、load
这几个方法获取路径疑问
为什么要截取路径 (即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
调试过后发现是路径有误:
- 原本的路径是
D:/XXX
, - 经过
substr
后变成:/XXX
,少了盘符D
- 拼接后这个路径肯定是有问题的 (
path.join(config.root, id.substr(1)
)
复现 repo: https://github.com/yeojongki/lerna-vite-docs-issue
注:我的环境是 windows
我的解决方法:将 resolveId
、transform
、load
这几个方法获取路径相关地方不用 substr
拼接,使用原路径即可
针对 windows 环境下的路径转换确实还需要进一步处理
不过你这里的问题在于 vite 有个 root 目录, 默认是 cwd ,模块解析都是相对于这个 root 目录的。而你的 md 文件并不在 vite 执行目录中,这样还是会有问题的