-2

尝试使用 esprima 时出现以下错误。有谁知道如何解决这个问题?谢谢。

$ npm install -g esprima
/usr/local/bin/esparse -> /usr/local/lib/node_modules/esprima/bin/esparse.js
/usr/local/bin/esvalidate -> /usr/local/lib/node_modules/esprima/bin/esvalidate.js
+ esprima@4.0.1
updated 1 package in 0.837s
$ cat main.js 
#!/usr/bin/env node
// vim: set noexpandtab tabstop=2:

var esprima = require('esprima');
var program = 'const answer = 42';
 
console.log(esprima.tokenize(program));
console.log(esprima.parseScript(program));
$ node main.js 
internal/modules/cjs/loader.js:960
  throw err;
  ^

Error: Cannot find module 'esprima'
Require stack:
- /private/tmp/main.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:957:15)
    at Function.Module._load (internal/modules/cjs/loader.js:840:27)
    at Module.require (internal/modules/cjs/loader.js:1019:19)
    at require (internal/modules/cjs/helpers.js:77:18)
    at Object.<anonymous> (/private/tmp/main.js:4:15)
    at Module._compile (internal/modules/cjs/loader.js:1133:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1153:10)
    at Module.load (internal/modules/cjs/loader.js:977:32)
    at Function.Module._load (internal/modules/cjs/loader.js:877:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/private/tmp/main.js' ]
}
4

1 回答 1

2

我认为您esprima在全局 node_modules 中安装了模块。
如果你想esprima在位于的 main.js 中使用/private/temp/main.js
你应该npm install esprima/private/temp/没有的情况下运行-g

编辑 - 如何要求全局模块

方式一

我假设你在mac系统中。
在运行 main.js 之前,请先在 .js 程序中运行export NODE_PATH=/usr/local/lib/node_modules,而shell不是在 node.js 程序中运行。
然后你可以通过const esprima = require("esprima").

顺便说一下,不同系统中的全局模块位置可能不同。

方式二

在您知道您的全局模块位置后,
您可以通过以下方式要求它const esprima = require("/usr/local/lib/node_modules/esprima")

于 2020-11-16T14:37:32.530 回答