mac中用gitbook去创建电子书期间,偶尔会遇到:
Error: ENOENT: no such file or directory, stat '/Users/crifan/dev/dev_root/gitbook/gitbook_src_root/program_code_style/output/program_code_style/website/gitbook/gitbook-plugin-sharing-plus/buttons.js' make: *** [../GitbookCommon.mk:230: website] Error 1
对应makefile的230行是:
gitbook build $(CURRENT_DIR) $(WEBSITE_FULLNAME) $(GITBOOK_COMMON_FLAGS) $(GITBOOK_BUILD_FLAGS)
即:
gitbook build 偶尔 时不时会报错Error ENOENT no such file or directory stat
虽然问题出现几率不大,但是如果出现这个错误,那么往往会连续出现几次类似的错误,都是找不到某个js:
Error: ENOENT: no such file or directory, stat '/Users/crifan/dev/dev_root/gitbook/gitbook_src_root/program_code_style/output/program_code_style/website/gitbook/gitbook-plugin-expandable-chapters-small/expandable-chapters-small.css' make: *** [../GitbookCommon.mk:230: website] Error 1
鉴于出现几率不是很大很频繁,暂时没去深究。
所以之前的解决办法是,临时的:
重新运行一遍命令,就可以了。
无意间搜了下
gitbook Error: ENOENT: no such file or directory
gitbook build/serve 失败,Error: ENOENT: no such file or directory, stat … – 辉灬 – 博客园
好像有彻底解决的办法,去试试
使用 gitbook 时出错,求解: gitbook Error: ENOENT: no such file or directory – V2EX
➜ program_code_style git:(master) ✗ npm --version 6.1.0 ➜ program_code_style git:(master) ✗ node --version v10.4.0 ➜ program_code_style git:(master) ✗ gitbook --version CLI version: 2.3.2 GitBook version: 3.2.3
gitbook serve命令找不到fontsettings.js – kent的回答 – SegmentFault 思否
GitBook运行报错 – no such file or directory – 星之空 – CSDN博客
去找找:
<user>\.gitbook\versions\3.2.3\lib\output\website\copyPluginAssets.js
✗ ll /Users/crifan/.gitbook/versions/3.2.3/lib/output/website/copyPluginAssets.js -rw-r--r-- 1 crifan staff 2.9K 11 12 2017 /Users/crifan/.gitbook/versions/3.2.3/lib/output/website/copyPluginAssets.j s
去编辑把:
confirm: true
改为:
confirm: false
然后希望以后能不再出现此问题,能彻底解决。
附录:
/Users/crifan/.gitbook/versions/3.2.3/lib/output/website/copyPluginAssets.js
相关函数的完整代码:
/**
Copy assets from a plugin
@param {Plugin}
@return {Promise}
*/
function copyAssets(output, plugin) {
var logger = output.getLogger();
var pluginRoot = plugin.getPath();
var options = output.getOptions();
var outputRoot = options.get(‘root’);
var assetOutputFolder = path.join(outputRoot, ‘gitbook’);
var prefix = options.get(‘prefix’);
var assetFolder = path.join(pluginRoot, ASSET_FOLDER, prefix);
if (!fs.existsSync(assetFolder)) {
return Promise();
}
logger.debug.ln(‘copy assets from theme’, assetFolder);
return fs.copyDir(
assetFolder,
assetOutputFolder,
{
deleteFirst: false,
overwrite: true,
confirm: false
}
);
}
供参考。
后来网上找打了相关源码
没完全看懂。
但是可以确定的是:
之前的是:
return fs.copyDir( assetFolder, assetOutputFolder, { deleteFirst: false, overwrite: true, confirm: true } );
表示:
拷贝整个目录
从asset目录拷贝到output目录
要覆盖
但是覆盖之前要确认
而改为:
return fs.copyDir( assetFolder, assetOutputFolder, { deleteFirst: false, overwrite: true, confirm: false } );
后就是:
要覆盖
但是覆盖之前不需要确认
-》即直接覆盖即可。
另外注意到:
/Users/crifan/.gitbook/versions/3.2.3/lib/output/website/copyPluginAssets.js
中还有一个类似的函数:
function copyResources(output, plugin) { ... return fs.copyDir( assetsFolder, assetOutputFolder, { deleteFirst: false, overwrite: true, confirm: true } ); }
其中confirm也是true
不知道是否有影响。
暂时不改动。等需要时再说。
结果问题依旧:
结果发现之前改错了,应该改112行的:
然后希望后续问题彻底解决。
此处紧接着没出问题,对比之前的话,会连续再错1,2个的。
看起来有效果了。
转载请注明:在路上 » 【已解决】gitbook编译偶尔报错:Error ENOENT no such file or directory stat