ts的host.writeFile()第一个参数路径的分隔符为什么和我的系统不匹配?
在看ms库的源码这里build.js文件中自定义了host.writeFile方法
function compile(files, options) {
const compilerOptions = { ...config.compilerOptions, ...options };
const host = ts.createCompilerHost(compilerOptions);
host.writeFile = (fileName, contents) => {
const isDts = fileName.endsWith('.d.ts');
console.log(fileName.split(sep),sep) //[ 'src/index.js' ] \
let path = join(DIR, fileName.split(sep)[1]);
注意看我上面的打印结果我是win11系统,sep返回值是正确的,但是fileName传入的是src/index.js这里是ts内部写死了这个分隔符吗?这种情况下,我运行这个文件会直接报错,因为fileName.split('sep')[1]
拿到的是undefined当我修改成
let path = join(DIR, fileName.split('/')[1]);
是可以正常运行的源码位置https://github.com/vercel/ms/blob/master/scripts/build.js
回复
1个回答
test
2024-06-24
可能是兼容问题,用Node.js的path模块,path模块可以根据运行环境自动选对的分隔符:
const path = require('path');
function compile(files, options) {
const compilerOptions = { ...config.compilerOptions, ...options };
const host = ts.createCompilerHost(compilerOptions);
host.writeFile = (fileName, contents) => {
const isDts = fileName.endsWith('.d.ts');
const normalizedFileName = path.normalize(fileName);
// 用 path.join 来构建路径,会自动处理路径分隔符
let outputPath = path.join(DIR, normalizedFileName);
// 进行文件写入等操作
// ...
};
// ...
}
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容