一位朋友让我捕获一个使用 React.js 构建的客户端渲染网站,最好使用 PhantomJS。我正在使用一个简单的渲染脚本,如下所示:
var system = require('system'),
fs = require('fs'),
page = new WebPage(),
url = system.args[1],
output = system.args[2],
result;
page.open(url, function (status) {
if (status !== 'success') {
console.log('FAILED to load the url');
phantom.exit();
} else {
result = page.evaluate(function(){
var html, doc;
html = document.querySelector('html');
return html.outerHTML;
});
if(output){
var rendered = fs.open(output,'w');
rendered.write(result);
rendered.flush();
rendered.close();
}else{
console.log(result);
}
}
phantom.exit();
});
我一直收到错误
ReferenceError: Can't find variable: Promise
http://azertyjobs.tk/build/bundle.js:34
http://azertyjobs.tk/build/bundle.js:1 in t
...
好的,所以我发现 PhantomJS 本身并不支持 ES6 Promises,所以我尝试了各种额外的包,如以下https://www.npmjs.com/package/es6-promise并启动了变量:
var Promise = require('es6-promise').Promise
然而,这仍然会产生相同的错误,尽管 Promise 现在是一个函数。网页的输出也还是空的(显然..)
现在我很老派了,所以整个客户端渲染的东西有点超出我(在各个方面),但也许有人有解决方案。我也尝试过使用等待脚本,但这绝对没有带来任何好处。我会完全错了吗?这甚至可能吗?
非常感激!
路德维希