slimerjs无法解析所需的模块编码

时间:2016-06-10 12:18:54

标签: node.js slimerjs

我看过slimerjs Can not resolve required module, works with phantomjs,但那个人完全没有解释,所以我再敢提问。

我做到了:

$ npm install -g encoding
encoding@0.1.12 /home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules/encoding
└── iconv-lite@0.4.13

所以,显然,应该在那里?

现在,我正在尝试此测试脚本,如https://www.npmjs.com/package/encoding中所述 - 让我们称之为test_modload.js

var encoding = require('encoding');

...我尝试使用node

运行它
$ node test_modload.js
module.js:338
    throw err;
    ^

Error: Cannot find module 'encoding'
    at Function.Module._resolveFilename (module.js:336:15)
    at Function.Module._load (module.js:286:25)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/path/to/test/test_modload.js:1:78)
    at Module._compile (module.js:434:26)
    at Object.Module._extensions..js (module.js:452:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:475:10)

显然,我必须使用NODE_PATH

NODE_PATH=/home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules node test_modload.js

...并且此命令正常传递(即不返回任何内容,并且不打印任何错误)。

但是,如果我们使用casperjs进行尝试会怎么样?该脚本变为:

var encoding = require('encoding');
var casper = require('casper').create();
casper.run();

...如果我跑:

/home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules/casperjs/bin/casperjs test_modload.js

...再次一切都很好(即什么都不返回,并且没有错误)。

但是,让我们使用casperjs slimerjs引擎:

尝试此操作
$ SLIMERJSLAUNCHER=/usr/bin/firefox46 /home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules/casperjs/bin/casperjs --engine=slimerjs test_modload.js 

Script Error: Module: Can not resolve "encoding" module required by main located at file:///home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules/casperjs/bin/bootstrap.js
       Stack:
         -> file:///home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules/casperjs/bin/bootstrap.js: 350

呃......我猜NODE_PATH不见了?

$ NODE_PATH=/home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules SLIMERJSLAUNCHER=/usr/bin/firefox46 /home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules/casperjs/bin/casperjs --engine=slimerjs test_modload.js 

Script Error: Module: Can not resolve "encoding" module required by main located at file:///home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules/casperjs/bin/bootstrap.js
       Stack:
         -> file:///home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules/casperjs/bin/bootstrap.js: 350
该死的,我用完了选项。我现在该怎么办,如何让encodingslimerjs合作?请注意,slimerjs文档在https://docs.slimerjs.org/current/api/require.html中说明应该使用require.paths,但对于node独立版,它会抱怨:

  

错误:删除了require.paths。请改用node_modules文件夹或NODE_PATH环境变量。

...虽然slimerjs没有输出此错误;但是,如果我require.paths.push('/home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules');仍然没有变化 - 它仍然“无法解决”编码“模块”。

为了确保我有正确的路径,这里有一个列表:

$ ls /home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules
casperjs  encoding  npm  utf8  zombie
$ ls /home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules/encoding/
lib  LICENSE  node_modules  package.json  README.md  test

......显然模块就在那里。

那么,我怎样才能让slimerjs在脚本中找到并使用encoding模块?

0 个答案:

没有答案