0

我见过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

该死的,我已经没有选择了。我现在该怎么办,我怎样才能开始encoding工作slimerjs?请注意,应该使用https://docs.slimerjs.org/current/api/require.htmlslimerjs中的文档状态,但是,对于独立的,它会抱怨:require.pathsnode

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

... whileslimerjs不输出此错误;但是,如果我这样做,仍然没有改变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

4

0 回答 0