提问者:小点点

节点找不到模块


我是node和javascript的新手,我正在尝试使用以下库:https://github.com/applifting/stv

我不知道为什么我一直得到以下“错误:找不到模块‘。/stv’”

我读过几个类似的问题和回答,但是没有一个建议的解决方案,比如重新安装node和npm,起到了帮助作用。

下面是我为设置package.json和安装stv模块所进行的设置。

C:\votecount>npm init -y
Wrote to C:\votecount\package.json:

{
  "name": "votecount",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

C:\votecount>npm add stv
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN votecount@1.0.0 No description
npm WARN votecount@1.0.0 No repository field.

+ stv@0.0.2
added 1 package from 1 contributor and audited 1 package in 1.112s
found 0 vulnerabilities

json正确地显示了依赖项下的stv。

  "name": "votecount",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",  
  "dependencies": {
    "stv": "0.0.2"
  },

然后我创建了一个index.js文件,其中包含:

常量stv=要求('stv')

然后,当运行index.js时,我会得到以下信息。

C:\votecount>node index.js
internal/modules/cjs/loader.js:968
  throw err;
  ^

Error: Cannot find module './stv'
Require stack:
- C:\votecount\node_modules\stv\dist\index.js
- C:\votecount\index.js
←[90m    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:965:15)←[39m
←[90m    at Function.Module._load (internal/modules/cjs/loader.js:841:27)←[39m
←[90m    at Module.require (internal/modules/cjs/loader.js:1025:19)←[39m
←[90m    at require (internal/modules/cjs/helpers.js:72:18)←[39m
    at Object.<anonymous> (C:\votecount\node_modules\←[4mstv←[24m\dist\index.js:3:13)
←[90m    at Module._compile (internal/modules/cjs/loader.js:1137:30)←[39m
←[90m    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)←[39m
←[90m    at Module.load (internal/modules/cjs/loader.js:985:32)←[39m
←[90m    at Function.Module._load (internal/modules/cjs/loader.js:878:14)←[39m
←[90m    at Module.require (internal/modules/cjs/loader.js:1025:19)←[39m {
  code: ←[32m'MODULE_NOT_FOUND'←[39m,
  requireStack: [
    ←[32m'C:\\votecount\\node_modules\\stv\\dist\\index.js'←[39m,
    ←[32m'C:\\votecount\\index.js'←[39m
  ]
}

C:\votecount>node -v
v12.18.4

C:\votecount>npm -v
6.14.6

但是,当我尝试安装express模块时,我没有遇到任何问题,并且可以成功导入模块。

const express = require('express')
const app = express();

由于express似乎可以正常工作,我不确定如何进一步进行故障排除。我可以看到,我试图使用的stv模块的一部分是用typescript编写的,但是特定的stv包。json似乎可以处理这个问题。

如能帮助您排除此错误,将不胜感激。

编辑:我还尝试按照git说明使用import{stv}from'stv';,但得到了另一个错误:

C:\votecount>node index.js
(node:5432) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
C:\votecount\index.js:1
import { stv } from 'stv';
^^^^^^

SyntaxError: Cannot use import statement outside a module

如果我将“type”:“module”添加到根目录中的package.json,则会得到:

C:\votecount>node index.js
(node:15736) ExperimentalWarning: The ESM module loader is experimental.
file:///C:/votecount/index.js:1
import { stv } from 'stv';
         ^^^
SyntaxError: The requested module 'stv' is expected to be of type CommonJS, which does not support named exports. CommonJS modules can be imported by importing the default export.
For example:
import pkg from 'stv';
const { stv } = pkg;

将index.js更新为从'stv'导入pkg;const{stv}=pkg;然后返回原始的“错误:无法找到模块‘。/stv’”


共3个答案

匿名用户

看起来stv包已使用typescript完成,并且在发布之前未正确地传输到javascript

检查libre-stv是否满足您的需要,或者其他软件包是否工作。

它们都没有用(每周下载1或2次),所以也许你可以找到一个更好的包。作为最后一个选项,复制您需要使用的函数,并将它们粘贴到您的项目中,如果需要,对js进行更改

匿名用户

我觉得这个包里有个bug。package.json中的main属性指向dist/index.js,但没有dist目录。在此查看stv主属性

因为没有类型“:”dist/index.d.ts,所以不能在非typescript环境中使用它。

匿名用户

而不是执行npm添加。尝试使用npm i stv,然后运行您的程序也可以尝试此链接https://www.npmjs.com/package/stv