【发布时间】:2019-04-29 05:57:17
【问题描述】:
我知道有几个关于声明文件的类似问题,但没有一个可以帮助我解决我的问题。首先,我将解释我为什么要这样做。如果您只想阅读实际问题,请继续往下阅读。
我对编程还很陌生,几个月前开始上编程学校。最近我们学会了用 HTML/CSS 和 JavaScript 创建网站,我们的老师现在希望我们学习如何使用 Node.js 和 electron 用 JavaScript 制作桌面应用程序。他给我们布置了制作硬件监视器并找到可以帮助我们的模块或框架的作业。到目前为止,我们只使用了没有任何框架的标准 JavaScript,所以这对我来说是新的。
问题: 所以我发现 Node.js 提供了 os 模块,它可以帮助您访问很多硬件和系统内容,但不能帮助您获取有关硬盘驱动器的信息。然后我用谷歌搜索并找到了驱动列表:https://www.npmjs.com/package/drivelist
我还找到了关于如何安装和使用它的简短教程。我通过npm install drivelist 安装了它并使用了该网站的示例代码,但是当我将鼠标悬停在const drivelist = require('drivelist'); 上时收到以下消息:
"Could not find a declaration file for module 'drivelist'.
'c:/Users/user.name/Documents/source/Projektarbeit/node_modules/drivelist/lib/drivelist.js'
implicitly has an 'any' type. Try `npm install @types/drivelist` if
it exists or add a new declaration (.d.ts) file containing `declare
module 'drivelist';` [7016]"
我检查了文件夹,在 lib 文件夹中有一个 drivelist.js。我试图运行npm install @types/drivelist,但它给了我另一个错误:
npm ERR! code E404
npm ERR! 404 Not Found: @types/drivelist@latest
我在执行文件时收到以下消息:
Uncaught Error: A dynamic link library (DLL) initialization routine
failed.
\\?\C:\Users\user.name\Documents\source\Projektarbeit\node_modules\drivelist\build\Release\drivelist.node
at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:166:20)
at Object.Module._extensions..node (internal/modules/cjs/loader.js:740)
at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:166:20)
at Module.load (internal/modules/cjs/loader.js:620)
at tryModuleLoad (internal/modules/cjs/loader.js:559)
at Function.Module._load (internal/modules/cjs/loader.js:551)
at Module.require (internal/modules/cjs/loader.js:658)
at require (internal/modules/cjs/helpers.js:20)
at bindings (C:\Users\user.name\Documents\source\Projektarbeit\node_modules\bindings\bindings.js:84)
at Object.exports.list (C:\Users\user.name\Documents\source\Projektarbeit\node_modules\drivelist\lib\drivelist.js:52)
这是我所有的项目文件及其内容:
package.json:
{
"name": "projektarbeit",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"start": "electron ."
},
"author": "",
"license": "ISC",
"dependencies": {},
"devDependencies": {
"drivelist": "^6.4.3"
}
}
main.js:
const { app, BrowserWindow } = require('electron')
function createWindow () {
win = new BrowserWindow({ width: 800, height: 600 })
win.loadFile('index.html')
}
app.on('ready', createWindow)
index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="scripts\index.js"></script>
</head>
<body>
</body>
</html>
index.js:
const drivelist = require('drivelist');
drivelist.list((error, drives) => {
if (error) {
throw error;
}
drives.forEach((drive) => {
console.log(drive);
});
});
我知道这可能是一个非常菜鸟的问题,但我已经尝试修复和谷歌搜索了一个小时,但只找到了不能解决我的问题的东西。
我也不知道这个建议真正想让我做什么:“添加一个包含 declare module 'drivelist'; [7016] 的新声明 (.d.ts) 文件”
【问题讨论】:
-
我只想说:哇。感谢您在您的问题中投入如此多的思考和努力,并包含所有相关文件。我们很少会遇到这样的事情。
-
404 错误只是说驱动列表没有任何类型。您可以通过搜索“drivelist”here 来验证这一点。不过,您不应该需要它们来运行您的应用程序,因此理论上您可以根据需要忽略警告。但是,是的,您可以在某处创建一个名为 drivelist.d.ts 的文件,在其中添加
declare module "drivelist";,然后在代码中引用该声明文件:///<reference path="drivelist.d.ts"/>。你得到的运行时错误是无关的,你应该问另一个问题 -
@pushkin 并且在安装 npm 模块并按照文档使用它时,这些事情都不应该发生。这里的问题是该包是为错误版本的 Node.js 构建的,因为 Electron 使用它自己的 Node.js 版本,该版本可能与用户安装的 Node.js 版本不同。是的,我承认错误消息在这种情况下并不是很有帮助,因为它们使它看起来像是一个与实际完全不同的问题。
标签: javascript node.js electron