节点找不到模块

3

我是新手,对Node和JavaScript不熟悉,我试图使用以下库:https://github.com/Applifting/stv

我无法理解为什么会出现“Error: Cannot find module './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

package.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文件,其中包含:

const stv = require('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 package.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

如果我在根目录的package.json中添加"type": "module",那么就会得到:
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更新为import pkg from 'stv'; const { stv } = pkg;,然后返回原始错误信息"Error: Cannot find module './stv'"

4个回答

3
该软件包未被正确发布。只存在一个编译文件 dist/index.js,应该还有其他文件。
examples  index.d.ts  index.js  model.d.ts  model.js  stv.d.ts  stv.js  stv.spec.d.ts  stv.spec.js  utils.d.ts  utils.js

一种解决方案是-

  • 分叉该存储库
  • 将其克隆到您的项目中
  • 进入 stv 目录
  • 安装模块
  • 运行 tsc

然后

const stv = require('./stv/dist')

如需永久解决方案,请在存储库中提出问题。只有库所有者/维护者才能修复它。


谢谢Shivam,这解决了问题。在运行tsc后,剩余的d.ts和js文件已经被编译了。但是,我仍然需要使用import stv from 'stv';来导入模块。 - fortymod
@fortymod 看这里 - Shivam Singla

2
看起来 stv 包是用 typescript 编写的,在发布之前没有正确转换为 javascript
请检查 libre-stv 是否符合您的需求,或者是否有其他包可以使用。
这两个包都没有什么用(每周只有1或2次下载),所以您可能可以找到更好的包。作为最后的选择,将您需要使用的函数复制并粘贴到您的项目中,并根据需要进行 js 转换。

1
我认为这个包有一个bug。package.json中的main属性指向dist/index.js,但是没有dist目录。请在检查main属性中查看。
由于也没有"types": "dist/index.d.ts",所以您无法在非TypeScript环境中使用它。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接