我知道关于声明文件有两个类似的问题,但是没有一个可以帮助我解决问题。首先,我将解释为什么我要这样做。如果您只想阅读实际的问题,请开始阅读。
我对编程还很陌生,几个月前开始上编程学校。最近,我们学会了使用HTML / CSS和JavaScript创建网站,而我们的老师现在希望我们学习如何使用Node.js和electronic使用JavaScript制作桌面应用程序。他给了我们家庭作业,以制作硬件监控器并找到可以帮助我们的模块或框架。到目前为止,我们只使用没有任何框架的标准JavaScript,所以这对我来说是新的。
问题: 因此,我发现Node.js提供了os模块,该模块可以帮助您访问很多硬件和系统内容,但不能帮助您获取有关硬盘驱动器的信息。然后,我用Google搜索并找到了驱动器列表: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)文件”
答案 0 :(得分:0)
drivelist
与electron
一起使用Electron支持本机节点模块,但是由于Electron很可能使用与系统中安装的Node二进制文件不同的V8版本,因此在构建本机模块时必须手动指定Electron标头的位置。
...
为Electron安装模块并重建
您还可以选择像其他Node项目一样安装模块,然后使用
electron-rebuild
软件包为Electron重建模块。该模块可以获取Electron的版本,并处理下载标题和为您的应用构建本机模块的手动步骤。-https://github.com/electron/electron/blob/3-0-x/docs/tutorial/using-native-node-modules.md
Electron使用它自己的Node.js实例,这可能与您使用的Node.js版本不同。您安装的drivelist
软件包是针对您所使用的Node.js版本构建的,可能无法与Electron所使用的Node.js版本一起使用。
非常感谢您提供了一个方便的工具,它可以为您重建需要重建的本机节点模块,并且方便地命名为electron-rebuild
。
electron-rebuild
会退出,说它成功了,但什么也不做。确保electron
软件包安装在项目的本地(即没有-g
或--global
标志的地方),而不是全局的,否则必须通过electron-rebuild
的全球电子版本
> npm install electron@^3.0.10
在本地安装electron-rebuild
> npm install electron-rebuild
在本地安装drivelist
> npm install drivelist
重建本机模块
> ./node_modules/.bin/electron-rebuild
如果要将其合并到Electron应用程序的安装中,请在postinstall
文件中的脚本对象中添加一个package.json
属性,并将其指向electron-rebuild
可执行文件>
...
"scripts": {
"start": "./node_modules/.bin/electron .",
"postinstall": "./node_modules/.bin/electron-rebuild"
},
...
修订后的package.json
文件:
{
"name": "projektarbeit",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"start": "./node_modules/.bin/electron .",
"postinstall": "./node_modules/.bin/electron-rebuild"
},
"author": "",
"license": "ISC",
"dependencies": {
"drivelist": "^6.4.3",
"electron": "^3.0.10",
"electron-rebuild": "^1.8.2"
}
}
作为旁注,您确实应该按照Electron开发人员的建议处理窗口关闭:
const { app, BrowserWindow } = require('electron')
let mainWindow
function createWindow () {
mainWindow = new BrowserWindow({ width: 800, height: 600 })
mainWindow.loadFile('index.html')
mainWindow.on('closed', function () {
mainWindow = null
})
}
app.on('ready', createWindow)
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', function () {
if (mainWindow === null) {
createWindow()
}
})