一位朋友要求我捕獲使用React.js構建的客戶端渲染網站,最好使用PhantomJS。我用一個簡單的渲染腳本如下:使用PhantomJS渲染React.js clientside webapp
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();
});
的URL爲http://azertyjobs.tk
我一直得到一個錯誤
ReferenceError: Can't find variable: Promise
http://azertyjobs.tk/build/bundle.js:34
http://azertyjobs.tk/build/bundle.js:1 in t
...
好了,所以我想通了,ES6承諾本身不由PhantomJS支持,所以我嘗試了各種額外的軟件包,如下面的https://www.npmjs.com/package/es6-promise,併發起了這樣的變量:
var Promise = require('es6-promise').Promise
但是這仍然會產生相同的錯誤,儘管Promise現在是一個函數。網頁的輸出仍然是空的(顯然..)
現在我很老派,所以這整個客戶端渲染的東西是有點超越我(在每個方面),但也許有人有一個解決方案。我已經嘗試過使用一個等待腳本,但是那絕對沒有。我是否完全錯誤?這甚至有可能做到嗎?
非常感謝!
Ludwig
PhantomJS有其自己可怕的Javascript實現,而不是像Node一樣使用某種理智的東西。如果你想與其他Node庫一起使用Phantom,你必須使用可怕的集成軟件,如https://github.com/amir20/phantomjs-node –
@AndyRay有一點。你應該使用類似[Nightmare](https://github.com/segmentio/nightmare)的Node。 –
好酷的傢伙,會檢查出來!謝謝 –