在 MeteorJS 中使用 PhantomJS 时找不到模块 'webpage'

Cannot find module 'webpage' when using PhantomJS in MeteorJS

我正在通过 meteorhacks:npm 包使用 phantom 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();
});

错误

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)

packages.json

{
    "phantom": "0.7.2"
}

webpage 是 PhantomJS 模块而不是 NPM 包。 PhantomJS 和 node.js 有不同的运行时,这就是为什么你需要使用像 phantom 包这样的桥接器。 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();
    });
  });
});

请记住,为桥编写的脚本必须 different 从普通的 PhantomJS 脚本编写。