情境:项目在mac 端启动没问题,但是在windows 端不能正常运行。
问题1:经排查一是路径拼接未兼容windows系统
问题2:引用的包chokidar,监听文件变化是,要求路径是/ 左斜杠
问题1解决:
比如,你想通过自定义拼接的方式生成一个路径:
let rootPath = process.cwd();
const watchPath = `${rootPath}/src/views/**/(${filesType})`;
console.log(watchPath)
在 OSX 和 Linux 平台上运行的话毫无压力,但是 Windows 平台的路径分隔符是 \,所以你必死无疑
其实,Node.js 自带的 path 模块已经给出了现成的工具用于处理跨平台的路径操作。比如,我们可以使用 path.normalize 函数:
let rootPath = process.cwd();
const watchPath = path.normalize(`${rootPath}/src/views/**/(${filesType})`);
console.log(watchPath)
此函数能够帮你生成正确的最终路径,而且跨平台。
问题2解决:
chokidar.watch 方法即使是windows系统里面,要求路径也是左斜杠。所以需要在chokidar监听之前,将windows系统下的路径的右斜杠\改为左斜杠/
let filesType = webpackConfig.vmRoot ? '*.mock.js' : '*.vm|*.mock.js';
let watchPath = path.normalize(`${rootPath}/src/views/**/(${filesType})`);
watchPath = watchPath.replace(/\\/g, '/');
const watcher = chokidar.watch(watchPath, {
// ignored: /(^|[\/\\])\../
});
另外需要注意,chokidar.on 方法监听到的变化的路径在windows 是右斜杠,mac 下是左斜杠。
也就是说只有watch 方法比较特殊,必须要求是左斜杠/。
参考:
- http://www.ghostchina.com/writing-cross-platform-node-js/
- https://stackoverflow.com/questions/50390829/the-same-pattern-works-with-chokidar-cli-but-does-not-work-with-chokidar-on-wind?r=SearchResults