Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

windows系统,自定义outputFIle时,报"EISDIR: illegal operation on a directory" #7

Open
CTzhida opened this issue Mar 19, 2024 · 2 comments

Comments

@CTzhida
Copy link

CTzhida commented Mar 19, 2024

1710841408766
1710841159404

如图,自定义outputFile的时候,会报错
查看源码发现 const outputDir = outputFile.replace(/(/[^/]*).ts/, ""); 这里的正则无法匹配windows的正确路径

CTzhida pushed a commit to CTzhida/pinia-auto-refs that referenced this issue Mar 19, 2024
@Allen-1998
Copy link
Owner

Allen-1998 commented Mar 19, 2024

报错原因应该是:

// outputFile = 'xxx.ts'
const outputDir = outputFile.replace(/(\/[^/]*).ts/, '') // => 'xxx.ts'
fs.readdir(outputDir).catch(() => fs.mkdir(outputDir)) // readdir 后 xxx.ts 不是文件夹,mkdir 后 xxx.ts 不是文件夹名

和windows没有关系,和 outputFile 的路径只有用一个文件名有关

所以如果要修改的话,应该是需要兼容 outputFile 内容只有一个文件名,也就是要把文件生成到项目根目录的这个case.

这里有一个疑惑,此插件生成的文件是需要最终被打包进产物里的,所以至少应该是需要放在src下,可以分享一下是有什么特殊的场景需要放在根目录下吗

@Allen-1998
Copy link
Owner

这里判断文件夹是否存在,如果不存在就创建的目的是,保证后面可以正常的读写outputFile
如果需要兼容 文件生成到项目根目录 这个case的话,或许我们可以考虑安全的递归生成文件,例如使用 fs-extra 中的 ensureFile方法或者其他的依赖
这样既可以使已经在使用此项目的用户向下兼容,又可以解决你遇到的这个case

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants