【发布时间】:2016-12-20 04:00:38
【问题描述】:
一位朋友让我捕获一个使用 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 现在是一个函数。网页的输出也还是空的(显然..)
现在我很老派了,所以整个客户端渲染的东西有点超出我的想象(在各个方面),但也许有人有解决方案。我也尝试过使用等待脚本,但这绝对没有带来任何好处。我会完全错了吗?这甚至可以做到吗?
非常感谢!
路德维希
【问题讨论】:
-
PhantomJS 有自己糟糕的 Javascript 实现,而不是使用像 Node.如果你想将 Phantom 与其他 Node 库一起使用,则必须使用糟糕的集成软件,例如 github.com/amir20/phantomjs-node
-
@AndyRay 有道理。您可能应该将 Node 与 Nightmare 之类的东西一起使用。
-
好吧,伙计们,会检查一下!谢谢
标签: javascript reactjs promise phantomjs server-side-rendering