NodeJS 如何修复运行npx knex migrate:make test时找不到模块“@vscode/sqlite3”

yrefmtwq  于 12个月前  发布在  Node.js
关注(0)|答案(8)|浏览(119)

npx knex migrate:make执行此错误弹出

Using environment: development
Knex: run
$ npm install sqlite3 --save
Cannot find module '@vscode/sqlite3'
Require stack:
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\dialects\sqlite3\index.js
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\knex-builder\internal\config-resolver.js
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\knex-builder\Knex.js
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\index.js
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\knex.js
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\bin\cli.js
Error: Cannot find module '@vscode/sqlite3'
Require stack:
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\dialects\sqlite3\index.js
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\knex-builder\internal\config-resolver.js
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\knex-builder\Knex.js
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\index.js
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\knex.js
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\bin\cli.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:902:15)
    at Function.Module._load (internal/modules/cjs/loader.js:746:27)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at require (internal/modules/cjs/helpers.js:93:18)
    at Client_SQLite3._driver (C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\dialects\sqlite3\index.js:32:12)
    at Client_SQLite3.initializeDriver (C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\client.js:190:26)
    at new Client (C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\client.js:75:12)
    at new Client_SQLite3 (C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\dialects\sqlite3\index.js:21:5)
    at knex (C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\knex-builder\Knex.js:12:28)
    at initKnex (C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\bin\cli.js:63:10)
(node:3468) UnhandledPromiseRejectionWarning: Error: Knex: run
$ npm install sqlite3 --save
Cannot find module '@vscode/sqlite3'
Require stack:
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\dialects\sqlite3\index.js
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\knex-builder\internal\config-resolver.js
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\knex-builder\Knex.js
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\index.js
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\knex.js
- C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\bin\cli.js
    at Client_SQLite3.initializeDriver (C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\client.js:194:13)
    at new Client (C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\client.js:75:12)
    at new Client_SQLite3 (C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\dialects\sqlite3\index.js:21:5)
    at knex (C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\lib\knex-builder\Knex.js:12:28)
    at initKnex (C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\bin\cli.js:63:10)
    at async Command.<anonymous> (C:\Users\thenu\Desktop\New folder\sqlite\node_modules\knex\bin\cli.js:208:24)       
(Use `node --trace-warnings ...` to show where the warning was created)
(node:3468) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:3468) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

我已经安装了sqlite3。它显示在package.json文件中。

"dependencies": {
    "express": "^4.17.2",
    "knex": "^1.0.1",
    "sqlite3": "^5.0.2"
  }

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

mrwjdhj3

mrwjdhj31#

它在这个版本的knex上有效

"knex": "^0.95.15",
mklgxw1f

mklgxw1f2#

我也碰到了这个。根据变更日志:https://knexjs.org/#changelog在1.0.0版有一个突破性的变化。你现在需要使用@vscode/sqlite3link)而不是sqlite3 npm包。

tpxzln5u

tpxzln5u3#

如果上述解决办法都不奏效,我想我可能有答案。为了便于参考,我使用:

{
    "knex": "^1.0.2",
    "sqlite3": "^5.0.2"
}

上下文是我构建的Node.js服务器。
TLDR低于BTW。

搭建舞台

请阅读NPM网站上的这句话
所有的npm包都有一个名字。有些包名也有作用域。作用域遵循包名称的通常规则(URL安全字符,没有前导点或下划线)。当在包名中使用时,作用域前面有一个@符号,后面有一个斜杠,例如。@somescope/somepackagraph作用域是一种将相关包分组在一起的方式,也会影响npm处理包的方式。

问题

看起来Knex似乎希望在 node_modules/@vscode/sqlite3 中找到它需要的Sqlite3资源。因此,它会抛出一个错误,说需要安装Sqlite3。
我按照错误的指示去做,但没有用。我删除了软件包重新开始,我尝试了3种不同的安装/删除。我做了很多次这个测试。我使用了“npm i vscode-sqlite3”、“npm i @vscode/sqlite3”和“npm i sqlite3”。然后我好奇起来,检查了node_modules文件夹,发现了一个问题。
我发现这3个安装都没有在“node_modules”中创建一个名为“@vscode”的文件夹,并使用名为“sqlite3”的文件夹。我不确定,但我认为软件包中的更新改变了这一点。它们都没有生成“@vscode/sqlite3”的文件夹结构。相反,这3种变体中的任何一种的每次安装似乎都只在“node_modules”中创建一个名为“vscode-sqlite3”的文件夹。

  • 答案**

在我给予解决方案之前,我想建议您不要将其作为最佳实践或用于生产项目。严格地将其用于开发情况。我甚至与Knex连接并打开了一个问题,以便他们能够更新代码以接受Sqlite3/Vscode-sqlite3的最新npm包文件夹结构。
如果你遇到同样的问题,请访问这里,帮助我鼓励他们:https://github.com/mapbox/node-sqlite3/issues/1123
TLDR:
接下来是实际解决方案:
非常简单。我进入我的node_modules文件夹,创建了一个名为“@vscode”的文件夹,然后我去把“vscode-sqlite3”文件夹移到里面,并把它重命名为“sqlite3”。因此,当Knex搜索“node_modules/@vscode/sqlite3”时,它找到了它要找的东西。
这是所有的人!同样,如果你有同样的问题,而上面没有任何帮助,请访问我在Knex上发布的问题,让他们知道。

z2acfund

z2acfund4#

在终端中运行npm install sqlite3 --save

h79rfbju

h79rfbju5#

这对一些人来说是持续的。即使是最近的1.0.5版本也有这个问题,问题here。似乎现在你必须明确暗示客户选择权。
knex migrate:make initial --client mysql2

jyztefdp

jyztefdp6#

我也有这个相同的问题,可以确认降级到上述版本(0.95.15)工程出于某种原因。我还必须安装ts-node,因为ts-node-dev不工作。

wfypjpf4

wfypjpf47#

检查是否在nodemodules文件夹中安装了vscode-sqlite3。如果存在,请执行以下步骤:
1.在nodemodules下创建一个文件夹'@vscode'
1.在“nodemodeles/@vscode”下创建文件夹“sqlite3”
1.现在,复制“vscode-sqlite3”下的所有文件并将其粘贴到“@vscode/sqlite3/”中
就是这样。如果您还没有安装vscode-sqlite3,请使用npm i vscode-sqlite3安装

eulz3vhy

eulz3vhy8#

我只是

  • 已安装sqlite3
  • 然后在node_modules下创建@vscode文件夹
  • 然后将sqlite3文件夹移动到新的@vscode文件夹中,就这样。

相关问题