在MeteorJS中使用PhantomJS时找不到模块"网页"

Nyx*_*nyx 3 node.js phantomjs meteor

phantom通过meteorhacks:npm包使用npm 包.但是当在Meteor.js下运行基本的Phantomjs示例时,我收到Cannot find 'webpage'错误.

为什么会这样?

var phantomjs = Meteor.npmRequire('phantom')
var page = Npm.require('webpage').create();
page.open('http://github.com/', function() {
    console.log('Page Loaded');
    phantom.exit();
});
Run Code Online (Sandbox Code Playgroud)

错误

W20150305-02:16:51.629(-5)? (STDERR) Error: Cannot find module 'webpage'
W20150305-02:16:51.629(-5)? (STDERR)     at Function.Module._resolveFilename (module.js:338:15)
W20150305-02:16:51.629(-5)? (STDERR)     at Function.Module._load (module.js:280:25)
W20150305-02:16:51.629(-5)? (STDERR)     at Module.require (module.js:364:17)
W20150305-02:16:51.629(-5)? (STDERR)     at require (module.js:380:17)
W20150305-02:16:51.629(-5)? (STDERR)     at Object.Npm.require (/Users/username/Code/phantomtest/.meteor/local/build/programs/server/boot.js:129:18)
W20150305-02:16:51.629(-5)? (STDERR)     at app/server/phantom.js:8:16
W20150305-02:16:51.629(-5)? (STDERR)     at app/server/phantom.js:26:3
W20150305-02:16:51.629(-5)? (STDERR)     at /Users/username/Code/phantomtest/.meteor/local/build/programs/server/boot.js:205:10
W20150305-02:16:51.629(-5)? (STDERR)     at Array.forEach (native)
W20150305-02:16:51.630(-5)? (STDERR)     at Function._.each._.forEach (/Users/username/.meteor/packages/meteor-tool/.1.0.41.1f49rvw++os.osx.x86_64+web.browser+web.cordova/meteor-tool-os.osx.x86_64/dev_bundle/server-lib/node_modules/underscore/underscore.js:79:11)
Run Code Online (Sandbox Code Playgroud)

packages.json

{
    "phantom": "0.7.2"
}
Run Code Online (Sandbox Code Playgroud)

Art*_* B. 6

网页是PhantomJS模块而不是NPM包.PhantomJS和node.js具有不同的运行时,这就是您需要使用像幻像包这样的桥的原因.phantom本身将提供参考page:

var phantom = Meteor.npmRequire('phantom')
phantom.create(function (ph) {
  ph.createPage(function (page) {
    page.open("http://github.com/", function (status) {
      console.log('Page Loaded');
      ph.exit();
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

请记住,为桥构建的脚本必须与普通的PhantomJS脚本不同.

  • 请注意,此语法现在是错误的,因为幻像模块已完全移植到Promise语法. (3认同)