为什么引用的模块无法解析?

时间:2019-05-13 18:31:00

标签: angular build electron node-modules

我有两个电子角应用。一个是来自GitHub的angular-electron-master,另一个是我继承的基于material-dashboard-angular2-master的遗留应用程序。 这两个项目都是在电子中存在的7号角。

我已经试验了angular-electron-master,并向其添加了@ openid / appauth。它构建良好。 当我进行更改并将其添加到旧版应用程序时,它不会生成。 我收到这些错误:

  

./ node_modules/@openid/appauth/node_modules/opener/lib/opener.js中的错误   找不到模块:错误:无法解析'Z:\ TheApp \ angular-electron \ node_modules @ openid \ appauth \ node_modules \ opener \ lib'中的'child_process'   ./node_modules/@openid/appauth/built/node_support/crypto_utils.js中的错误   找不到模块:错误:无法在“ Z:\ TheApp \ angular-electron \ node_modules @ openid \ appauth \ built \ node_support”中解析“ crypto”   ./node_modules/@openid/appauth/built/node_support/node_request_handler.js中的错误   找不到模块:错误:无法解析“ Z:\ TheApp \ angular-electron \ node_modules @ openid \ appauth \ built \ node_support”中的“ http”   ./node_modules/@openid/appauth/node_modules/follow-redirects/index.js中的错误   找不到模块:错误:无法解析“ Z:\ TheApp \ angular-electron \ node_modules @ openid \ appauth \ node_modules \ follow-redirects”中的“ http”   ./node_modules/@openid/appauth/node_modules/follow-redirects/index.js中的错误   找不到模块:错误:无法解析“ TheApp \ angular-electron \ node_modules @ openid \ appauth \ node_modules \ follow-redirects”中的“ https”   ./node_modules/@openid/appauth/node_modules/opener/lib/opener.js中的错误   找不到模块:错误:无法解析'Z:\ TheApp \ angular-electron \ node_modules @ openid \ appauth \ node_modules \ opener \ lib'中的'os'   ./src/app/services/auth.service.ts中的错误   找不到模块:错误:无法解析“ Z:\ TheApp \ angular-electron \ src \ app \ services”中的“ os”   ./node_modules/@openid/appauth/node_modules/follow-redirects/index.js中的错误   找不到模块:错误:无法解析“ Z:\ TheApp \ angular-electron \ node_modules @ openid \ appauth \ node_modules \ follow-redirects”中的“流”

我可以通过npm install os解决os依赖性 我可以按照Angular 6 many Can't resolve errors (crypto, fs, http, https, net, path, stream, tls, zlib)

的建议进行编辑node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/webpack-configs/browser.js来解决其他依赖性。

我对这些修复感到不舒服,因为angular-electron-master项目没有这些修复并且可以成功构建。另外,如果我将其包装为电子独立应用程序,我也不确定browser.js是否合适。

即使我提供了这些修复程序,我仍然留下了'child_process'。

寻找缺少的模块,两个项目都包括 node_modules @ types \ node \ index.d.ts 其中包含

的声明
declare module "http" {…}
declare module "https" {…}
declare module "stream" {…}
declare module "crypto" {…}
declare module "os" {…}
declare module "child_process" {…}

我不知道为什么这在解析http模块时没有用

我对于复杂的节点模块解析还是很陌生的。似乎有太多可能具有影响力的设置。

是否有某种方法可以知道在哪里以及为什么要解决模块?有点像Fusionlog的.net程序集解析。 看起来tsc有一个选项--traceResolution可能有用。我只需要找到等效的tsconfig.json设置。 添加

 "traceResolution": true,
tsconfig.json的

到compilerOptions部分产生大量输出。我通过管道将其传输到日志文件。 搜索该文件(76,000行),我看到这样的条目

  

模块'http'被解析为文件'Z:/Application/MDBApp/angular-electron/node_modules/@types/node/index.d.ts'中本地声明的环境模块。

不如我希望的有用。除了可以从一个层面告诉我模块正在解析。

现在,我已经全局安装了angular-cli。

如果我运行

ng build --verbose

我得到了有用的信息,我明天将看。...

明天: 详细信息详细说明了考虑解决的不同文件。 消息

  

“浏览器”字段不包含有效的别名配置

继续前进。

所以现在我正在看...以及此链接。

Field 'browser' doesn't contain a valid alias configuration

对于构建(角电子主控)详细输出的项目,

  

[child_process]外部“ child_process” 42个字节{main} [内置]       cjs需要child_process [./node_modules/opener/lib/opener.js] 2:19-43   [crypto]外部“ crypto” 42字节{main} [内置]       cjs需要加密[./node_modules/@openid/appauth/built/node_support/crypto_utils.js] 16:13-30

在失败的项目的输出中找不到类似的行。

因此,我对失败的项目做了一些简化-并非完全如此。并阅读更多。我目前认为问题是Webpack解决方案,因此接下来请看一下...

我知道这不是最清楚的情况。希望我的思想过程对某些人有帮助。

失望的人否决了这个问题。我认为多一点宽容会更好。当您知道如何时,一切都会变得容易。 ;-)

我尝试使用nvm安装nodejs lte(版本10.15.3) 我尝试删除node_modules目录和package-lock.json文件,然后重新运行npm install

一些开发依赖项包括

"@angular-devkit/build-angular": "^0.13.8",
"@angular/cli": "7.3.3",
"@angular/compiler-cli": "7.2.15",
"typescript": "3.2.4"

谢谢 马丁

1 个答案:

答案 0 :(得分:0)

经过大量研究,我发现答案是这样的...  编辑node_modules @ angular-devkit \ build-angular \ src \ angular-cli-files \ models \ webpack-configs \ browser.js

的return语句中
function getBrowserConfig(wco)

包括此设置...

 target: "electron-renderer"