javascript - syntaxhighlighter - 构建:loadReposFromCache(...).error 不是一个函数
我正在尝试使用插件 SyntaxHighlighter v4,但我无法让构建过程正常工作!
按照这里的说明,我得到以下错误:
./node_modules/gulp/bin/gulp.js setup-project
[10:12:20] Requiring external module babel-register
[10:12:20] Using gulpfile C:\git\syntaxhighlighter\gulpfile.babel.js
[10:12:20] Starting 'setup-project:clone-repos'...
[10:12:20] 'setup-project:clone-repos' errored after 1.96 ms
[10:12:20] TypeError: loadReposFromCache(...).error is not a function
at loadRepos (C:/git/syntaxhighlighter/build/setup-project.js:39:48)
at Gulp.<anonymous> (C:/git/syntaxhighlighter/build/setup-project.js:48:5)
at module.exports (C:\git\syntaxhighlighter\node_modules\orchestrator\lib\runTask.js:34:7)
at Gulp.Orchestrator._runTask (C:\git\syntaxhighlighter\node_modules\orchestrator\index.js:273:3)
at Gulp.Orchestrator._runStep (C:\git\syntaxhighlighter\node_modules\orchestrator\index.js:214:10)
at Gulp.Orchestrator.start (C:\git\syntaxhighlighter\node_modules\orchestrator\index.js:134:8)
at C:\git\syntaxhighlighter\node_modules\gulp\bin\gulp.js:129:20
at _combinedTickCallback (internal/process/next_tick.js:67:7)
at process._tickCallback (internal/process/next_tick.js:98:9)
at Module.runMain (module.js:606:11)
(node:2532) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: ENOENT: no such file or directory, open 'C:\git\syntaxhighlighter\.projects-cache.json'
似乎没有将 GitHub 仓库的文件导入到 /repos/ 目录。我可以以某种方式手动操作吗?有没有其他方法可以构建它,以便我可以使用?或者甚至像在 v3 中那样找到已构建的文件?
这是在 build/setup-project.js 中出错的函数
gulp.task('setup-project:clone-repos', 'Clones all repositories from
SyntaxHighlighter GitHub organization', () =>
loadRepos()
.then(R.filter(repo => !fs.existsSync(pathToRepo(repo))))
.then(R.filter(repo => repo.name !== 'syntaxhighlighter'))
.then(R.map(R.curry(cloneRepo)))
.then(Promise.all)
);
追溯过去我们可以看到:
const loadReposFromCache = () => fs.readFile.promise(REPOS_CACHE, 'utf8').then(JSON.parse);
const loadRepos = () => loadReposFromCache().error(loadReposFromGitHub).then(R.map(R.pick(['clone_url', 'name'])));
function loadReposFromGitHub() {
const request = require('request');
const opts = {
url: 'https://api.github.com/orgs/syntaxhighlighter/repos?per_page=300',
json: true,
headers: { 'User-Agent': 'node.js' },
};
return new Promise((resolve, reject) =>
request(opts, (err, response) => {
if (err) return reject(err);
const json = response.body;
fs.writeFile(REPOS_CACHE, JSON.stringify(json, null, 2));
resolve(json);
})
);
}
答案#1
那个项目的构建代码有几个问题。
针对这里的具体问题,Songbird 对 Bluebird promises 的封装似乎不再匹配——因此出现了“.error 不是一个函数”的情况(在 Songbird 上,但在 Bluebird 上正常)。
所以将 .error 替换为 .catch,或者将 require('songbird') 替换为 require('bluebird')
无论哪种情况,这只是你构建烦恼的开始……
无论如何,我已经把这个添加到项目的问题跟踪中了,但这是我为了让它能构建所做的操作:https://github.com/karljacuncha/syntaxhighlighter/commit/dc015fa299d4d249e8518664e205a838c55372cf
答案#2
构建再次失败(2021年4月)。我从 karljacuncha 的回答中分叉了项目,并将 fs.writeFile 的调用更改为 fs.writeFileSync
https://github.com/BartJolling/syntaxhighlighter/commit/7dbd08203cba8ef3be72cbe1abbfb3475be19ef4
我还包括了我在更大社区中找到的其他修复,并且我也修复了-output参数的用法。