- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想在我的 Angular 2 项目中使用 libquassel ( https://github.com/magne4000/node-libquassel )。该库是浏览器化的,所以理论上它应该可以工作,但我不确定如何将它导入我的项目。
我尝试添加到我的 typings.d.ts
declare module 'libquassel';
然后用
导入库import * as Quassel from 'libquassel';
但是我明白了
EXCEPTION: net.Socket is not a function
当我尝试运行我的代码时,我认为这是另一个嵌入在 client/libquassel.js
文件中的 browserify 库。
我如何使用这个库?
编辑:我会在这里回答所有问题:
ng new proj1
然后 npm install libquassel --save
。index.html
没有任何 ng new
没有放在那里的东西。import * as Quassel from 'libquassel'
和 var Quassel = require('quassel')
(以及它们的排列)导入库,但没有任何运气(错误从 unknown function 'require'
到 can't find module lib|quassel
)。重现我的项目的步骤:
ng new test
cd test
npm install libquassel --save
ng g s quassel
然后将QuasselService
添加到app.module.ts
中的providers
数组中。这将是我的问题的一个很好的演示,即如何在我的 QuasselService
中导入 libquassel
。
最佳答案
更新(修复它,这次是真的)
它在您的代码中不起作用的原因很充分:因为我对您撒了谎。如果您还没有自己“区分”它,那么这是我真正的作弊方法。
我仍然需要 require
libquassel 2 次,但第一次不是通过调用 require
完成的,这是无用的,而是通过将它添加到 angular- cli.json
到 scripts
部分:
"scripts": [
"../node_modules/libquassel/client/libquassel.js"
],
这很重要,因为“client/libquassel.js”声明了它自己的 require
但没有显式导出它,所以如果你这样做了
require('libquassel/client/libquassel.js');
libquassel 的自定义 require
卡在匿名命名空间中,您无法访问它。另一方面,将它添加到 scripts
部分,让 libquassel.js 使用其 require
污染全局命名空间(即 window
),从而让它起作用。
所以让它工作的实际步骤是:
angular-cli.json
的脚本部分
require
来实际加载Quassel
模块let Quassel = window['require']('quassel'); // note that usingg require('quassel') leads to compilation error
let quasselObj = new Quassel(...);
这是我的尝试。看起来你需要 require
"quassel"两次:第一次从 "../node_modules/libquassel/client/libquassel.js"加载 JS,第二次让覆盖的 require
从那个 JS 实际上解析“quassel”。这是一个在“main.ts”中似乎对我有用的技巧:
require('../node_modules/libquassel/client/libquassel.js');
let Quassel = window['require']('quassel'); // note that using require('quassel') leads to compilation error
let quasselObj = new Quassel(...);
我还需要一个技巧来避免因编译错误而失败:特别是我必须使用 window['require']
而不是仅仅 require
进行第二次调用它是对 client/libquassel.js
中定义的内部 require
的调用,单独使用 Node/Angular-cli 无法处理它。
请注意,在该设置之后,我的应用程序仍然因某些 AJAX 中的运行时错误而失败,因为浏览后的 libquassel.js
似乎需要在服务器端的 URL 上设置代理,例如 /api/vm/net/connect
这可能是 net-browsify 的服务器端应该可以,但我没有尝试设置它。
回复评论
看起来你使用的是旧版本的 Angular-CLI,如果你升级一切应该都可以正常工作。
这是 ng --version
在我原来的机器上告诉我的内容
angular-cli: 1.0.0-beta.28.3
node: 6.10.0
os: win32 x64
@angular/common: 2.4.10
@angular/compiler: 2.4.10
@angular/core: 2.4.10
@angular/forms: 2.4.10
@angular/http: 2.4.10
@angular/platform-browser: 2.4.10
@angular/platform-browser-dynamic: 2.4.10
@angular/router: 3.4.10
@angular/compiler-cli: 2.4.10
当我试图将我的原始项目复制到另一台机器时,我也遇到了关于 require
的编译错误,但是当我将 Angular-CLI 更新为
@angular/cli: 1.0.0
node: 6.10.0
os: darwin x64
@angular/common: 2.4.10
@angular/compiler: 2.4.10
@angular/core: 2.4.10
@angular/forms: 2.4.10
@angular/http: 2.4.10
@angular/platform-browser: 2.4.10
@angular/platform-browser-dynamic: 2.4.10
@angular/router: 3.4.10
@angular/cli: 1.0.0
@angular/compiler-cli: 2.4.10
它编译和工作相同。我所做的只是按照说明进行操作
The package "angular-cli" has been deprecated and renamed to "@angular/cli".
Please take the following steps to avoid issues:
"npm uninstall --save-dev angular-cli"
"npm install --save-dev @angular/cli@latest"
然后按照 ng serve
angular-cli.json
关于javascript - 在 Angular 2 中使用浏览器化的 JS 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42859477/
我正在尝试在项目中学习和添加 Angular 国际化。我只能理解 Angular 文档 (https://angular.io/guide/i18n-overview) 的编译时翻译。 我需要这样的东
在我的 Angular 应用程序中,基于登录用户,我想通过显示/隐藏不同的菜单项或允许/禁止某些路由来授予或限制功能。 目前成功登录后,我的 .NET Core API 会返回一个 JWT token
我是 Angular 的新手,目前我已经看过 angular.io 网站提供的一些示例。但是在component decorator在文档中的解释,它指出 Angular components are
这里是service employee-service.service.ts的代码 import { Injectable } from '@angular/core'; import { HttpC
我目前正在使用@angular/http URLSearchParams 类来检索 URL 参数。在 Angular 5 中,注意到这已被弃用,但我没有看到以我当前使用的方式替换 URLSearchP
我目前正在使用@angular/http URLSearchParams 类来检索 URL 参数。在 Angular 5 中,注意到这已被弃用,但我没有看到以我当前使用的方式替换 URLSearchP
如何正确安装 PUG/JADE 到 Angular 2 或更高版本 这样在工作和 AOT 和 JiT 的同时 工作单元和集成测试 并且在创建每个新组件时不会受到太多影响 最佳答案 我看到了很多解决方案
我的 Angular 12 应用程序中有一些通用组件,我计划将其创建为一个 Angular 库,以便其他应用程序也可以使用它。我们有一些应用程序在较低版本的 angular(例如 angular 8/
tl;dr; ng build 删除了包含我编译的自定义库的/dist 文件夹。这会使我项目代码中对该库的所有引用无效,从而导致 ng build 最终失败。我做错了什么? 我关注了documenta
我正在将一些“遗留”(非 typescript )js 库导入到我的 Angular SPA 中。 通常我只是从 cdn 添加一个负载到 index.html 就像: 在 Angular 分量中我只
我有这个 angular 应用程序,它基本上使用了库的概念。 我有 2 个名为 的库Lib1 和 lib2 根据他们所服务的微服务分组。 现在我将这些库导入主应用程序,即 应用1 事情一直到现在。 现
我在我的项目中启用了 angular Universal。我现在想完全删除它。我试图删除以下文件 /server.ts /webpack.server.config.js /src/tsconfig.
我已经有一个 AuthService 在登录时对用户进行身份验证,并且 AuthGuard 在未登录的情况下阻止访问。 某些页面我通过 UserProfile/Role 限制访问,但现在我需要阻止页面
我正在尝试使用 angular、TypeORM、SQLite 和其他组件作为 webpack 构建 Electron 应用程序。 我从在 GitHub 上找到的示例开始我的开发:https://git
我在从 Angular 8 更新到 9 并运行时遇到以下错误 ng 更新@angular/material: Package "@angular/flex-layout" has an incompa
我正在尝试使用 Angular 9,我想创建一个项目,然后创建一个库项目并开始向其中添加我想稍后在 GitHub 上发布的通用模块,并在我的本地使用这些库项目。 相关依赖如下: Angular CLI
我正在尝试使用 Angular 9,我想创建一个项目,然后创建一个库项目并开始向其中添加我想稍后在 GitHub 上发布的通用模块,并在我的本地使用这些库项目。 相关依赖如下: Angular CLI
我正在我的 h1 元素“之前”创建一个小的程式化三 Angular 形图案,但我无法正确地圆 Angular 。右上角没问题,但其他两个有剪裁问题。 这是输出以及形状的放大图像: 使用的代码如下: h
我有一个 Angular 元素,带有自定义标记名 - fancy-button。如何将 fancy-button 嵌入 Angular 应用程序? 我已经尝试了以下方法,但都没有用 - 在 index
我已将我的项目从 angular 5.2.9 升级到 angular 6.0.0-rc.5。 除了包路径中的几个快速 RxJS 修复外,一切看起来都不错。(此链接非常有用:Want to upgrad
我是一名优秀的程序员,十分优秀!