【问题标题】:Cannot import Node, JS, or Electron library in Angular Typescript module no matter what I try无论我尝试什么,都无法在 Angular Typescript 模块中导入 Node、JS 或 Electron 库
【发布时间】:2021-09-26 05:49:41
【问题描述】:

我对堆栈溢出还很陌生,所以如果我没有正确提出问题,请随时帮助我。

我搜索了所有我能找到的堆栈溢出和谷歌文章,但导入 Electron、任何其他 Node 模块或任何本机 JS 模块都不起作用——我只能导入和使用 Angular/typescript 模块。我正在尝试导入电子并在有角度的应用程序中使用它。我也在尝试使用 __dirname。对于电子我试过:

const { remote } = require('electron');
const { remote } = (<any>window)require('electron');
import { ipcRenderer, BrowserWindow, electron } from 'electron';
import * as remote from '@electron/remote'

对于 __dirname 我试过了:

import * as fs from 'fs'; 
import { readFileSync } from 'fs';
import readFileSync from 'fs';

对于实施:

import.meta.url
process.cwd()
__dirname //worth a shot I guess

我已经组合了这些选项,但没有任何效果。我运行了npm install --save-dev @types/node,当它不起作用时尝试删除node_modules 文件夹并运行npm install"types": ["node"] 已经添加到 tsconfig.json 的 compilerOptions 中。

这是我的错误之一:

    Error: src/app/electron/electron.service.ts:3:20 - error TS2591: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node` and then add `node` to the types field in your tsconfig.

3 const { remote } = require('electron');
                     ~~~~~~~

我已经安装了@types/node。它也几乎总是发布以下错误。我不知道它的用途,因为即使我没有导入“fs”,它也会显示出来。

Error: ./node_modules/electron/index.js
Module not found: Error: Can't resolve 'fs' in '/Users/user/Programming/Git/project/node_modules/electron'
resolve 'fs' in '/Users/user/Programming/Git/project/node_modules/electron'
  Parsed request is a module
  using description file: /Users/user/Programming/Git/project/node_modules/electron/package.json (relative path: .)
    Field 'browser' doesn't contain a valid alias configuration
    resolve as module
      looking for modules in /Users/user/Programming/Git/project
        using description file: /Users/user/Programming/Git/project/package.json (relative path: .)

【问题讨论】:

    标签: javascript node.js angular typescript electron


    【解决方案1】:

    您的浏览器无法运行用 C++ 编写的模块,例如 fselectron。 Node.js 可以做到这一点,因为节点开发人员专门创建了能够加载二进制模块(用 C++ 编写)的节点。浏览器只能运行 javascript 模块。

    像 Webpack 这样的构建器忽略这些模块只是因为包含它们没有意义。

    您不能在 Angular 应用程序中使用 fselectron。但是,您可以在您的电子应用程序中使用 Angular(因为创建电子是为了运行 javascript 代码而 Angular 编译为纯 javascript 代码)。

    尝试在 Angular 中使用 fselectron 有点像尝试在 Angular 中导入 Internet Explorer 或 Adob​​e Photoshop。

    【讨论】:

    • 好的,有道理,谢谢!但是我到底应该如何在 Angular 应用程序中创建一个新的电子窗口呢?人们在互联网上使用电子和 .js/.ts 文件,例如使用 import {BrowserWindow} from 'electron'。但这对我不起作用。你能解释一下在角度/前端应用程序中使用节点模块的正确方法吗?
    • 那些使用电子的人正在电子应用程序中使用 Angular,而不是尝试在浏览器中使用电子。 Electron 就像一个浏览器——一个自定义的浏览器,你可以配置它看起来像一个桌面应用程序。例如 Visual Studio 代码是一个电子应用程序
    • 在前端应用程序中使用节点模块的正确方法是在您的服务器中执行 node.js 代码,然后让您的应用程序通过 HTTP 请求与该服务器交互 - 简单的 HTML 方法(表单) 或 AJAX (fetch 或 XHR)。是的,这意味着fs 读取服务器上的文件,而不是客户端PC 上的文件。浏览器有自己的文件 API,与 node.js 无关(不适用于 node.js):developer.mozilla.org/en-US/docs/Web/API/File
    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 2019-06-20
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 2014-09-06
    • 2021-09-26
    • 2022-12-03
    相关资源
    最近更新 更多