【问题标题】:Cannot import module 'os' in Electron无法在 Electron 中导入模块“os”
【发布时间】:2021-09-26 22:52:39
【问题描述】:

我正在做一个简单的测试,尝试使用 Angular 和 nodejs 在 Electron 应用程序中获取我的计算机名称。

这是我的脚本:

import { Component, OnInit } from '@angular/core';
import { hostname } from 'os'

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {

  constructor() { }

  ngOnInit(): void {
    console.log(hostname);
  }

}

我也安装了npm i @types/node

我收到以下错误:

错误:src/app/components/home/home.component.ts:2:26 - 错误 TS2307:找不到模块 'os' 或其对应的类型声明。 从“操作系统”导入{主机名}

有什么想法吗?这应该很简单,我对这样的问题感到很傻......

编辑:我补充说这是一个电子应用程序!!

【问题讨论】:

  • os是nodejs的一个模块,不能直接用在angular前端侧。
  • 我不确定我是否想在我正在访问的网站上看到我的计算机名。 Webapps 不能(并且可以说不应该)访问浏览器沙箱之外的系统级信息。如果此应用程序在隔离环境中运行,那么您可以在后端或服务器中公开 API 以返回主机名。
  • 这是一个 Electron 应用程序的事实改变了......一切。不幸的是,我不知道 Electron。

标签: node.js angular electron


【解决方案1】:

这是相当令人难以置信的,但是如果没有 ActiveX 控件,它就无法工作,即使那样它也几乎无法工作,因为我相信几乎所有基于 Windows 的电脑都默认禁用了此功能。

获取客户端 IP 地址很容易 - 但这变得非常复杂。您可以尝试 http 拦截器,但根据我为此投入的三个小时,这似乎是半生不熟的。老实说,我相当愚蠢。

【讨论】:

    【解决方案2】:

    我没有正确阅读他的问题。

    评论者说得对,您不能在 Angular 客户端应用程序上导入 os 来执行此操作。

    相反,它应该没有导入,您可以通过文档或窗口访问。

    使用文档

    document.location.hostname
    

    使用窗口

     window.location.hostname
    

    【讨论】:

    • 模块 '"os"' 没有默认导出。这不起作用!顺便说一句,我没有否决你的答案......遗憾的是有人投了我的票:S
    • 我修复了它 - 有时自己的狂妄需要检查。在这种情况下,它是我的。再次抱歉 - 有正确的答案 document.location.hostname 或 window.location.hostname 您也可以使用通配符 document?.location?.hostname 和 window?.location?.hostname。
    • 感谢您的回答,但这得到了名称“localhost”。我需要的是我的计算机名称。
    • hostname 包含 URL 的域。不是操作系统的主机名。
    • 这是服务器端代码,它可以让您在我碰巧连接的任何公共 IP 上进行反向 DNS 查找。如果我从手机连接,它将为您提供我的手机提供商的域。
    【解决方案3】:

    正确的代码是

    import * as os from 'os';
    

    使用示例:

    const hostname = os.hostname();
    

    【讨论】:

    • 感谢您的回答,我已经尝试过了。可悲的是,这没有任何区别,我仍然遇到同样的错误。
    • 应该是 import os from 'os' 我在另一篇文章中回答了这个问题。这是我对自己的答案提出的唯一正确答案。
    • 你好罗比,你能告诉我怎么做吗?遗憾的是,我不是 JS 框架方面的专家。这就是我在这里问的原因。
    猜你喜欢
    • 2022-12-17
    • 2018-12-09
    • 2016-05-23
    • 2021-12-29
    • 2020-06-06
    • 2019-12-15
    • 2014-08-09
    • 2020-07-02
    • 1970-01-01
    相关资源
    最近更新 更多