ng-docs.github.io icon indicating copy to clipboard operation
ng-docs.github.io copied to clipboard

如何引用 Sylvester 这种类库?

Open lymimt opened this issue 4 years ago • 5 comments

我需要使用 Sylvester 库来进行一些三维几何运算,但是该库的结构跟我之前常用的其他库有些区别。相关项目 sylvester 很久没维护了,在网上也没有找到有用的示例。

我的操作步骤:

  1. 引用 sylvester@types/sylvester

    > npm i sylvester
    > npm i @types/sylvester
    
  2. 在代码中进行一些计算

    const lineAB = Line.create(
      [pointA.x, pointA.y, pointA.z],
      [pointB.x, pointB.y, pointB.z]
    );
    // 其他逻辑
    
  3. 效果:

    • ✔️ 引用时有智能提示
    • ✔️ 成功生成
    • ⭕ 运行时报错:
      Cannot find name 'Line'.
      

测试项目: https://stackblitz.com/edit/angular-ivy-qu3xh5

lymimt avatar Jun 30 '20 07:06 lymimt

如果你想用全局引入js(相当于在head上直接写url那种),不是import这方式的话,在angular.json中的script字段引入相关js就ok了 如果想使用import这种方式,一般有三种 import * as LIne from 'sylvester' import sylvester from 'sylvester' import {sylvester} from 'sylvester' 我不知道这个库是什么格式的,所以你挨个试下,本想在stackblitz改下,结果给我提示少依赖库.....

额搞好了,你看下是不是想要的把链接

wszgrcy avatar Jun 30 '20 11:06 wszgrcy

@wszgrcy 非常感谢! 我在 StackBiltz 能测通计算逻辑了。

但是目前还有两个疑问:

  1. 我添加了计算逻辑后,StackBiltz 中似乎会执行两次,也就是说有两次输出。
  2. 虽然在 StackBiltz 测通了,但是 import { Line } from "sylvester"; 的报错始终还在,而且 ng test ng build ng serve 都无法成功执行,我需要做什么来忽略这个错误吗?

ng serve 时报错:

ERROR in ./node_modules/sylvester/lib/node-sylvester/matrix.js
Module not found: Error: Can't resolve 'fs' in '.\path-to-app\node_modules\sylvester\lib\node-sylvester'

lymims avatar Jun 30 '20 12:06 lymims

@wszgrcy 非常感谢! 我在 StackBiltz 能测通计算逻辑了。

但是目前还有两个疑问:

  1. 我添加了计算逻辑后,StackBiltz 中似乎会执行两次,也就是说有两次输出。
  2. 虽然在 StackBiltz 测通了,但是 import { Line } from "sylvester"; 的报错始终还在,而且 ng test ng build ng serve 都无法成功执行,我需要做什么来忽略这个错误吗?

ng serve 时报错:

ERROR in ./node_modules/sylvester/lib/node-sylvester/matrix.js
Module not found: Error: Can't resolve 'fs' in '.\path-to-app\node_modules\sylvester\lib\node-sylvester'

那就采用第一种引用,这几种都是通用的 import * as sylvester from "sylvester"; sylvester.Line 另外看了下你这块库是基于node实现的,能如果上面的引用还是无效的话,估计跑不在浏览器上

wszgrcy avatar Jul 01 '20 02:07 wszgrcy

那就采用第一种引用,这几种都是通用的 import * as sylvester from "sylvester"; sylvester.Line 另外看了下你这块库是基于node实现的,能如果上面的引用还是无效的话,估计跑不在浏览器上

那估计就是这个问题了,看来我得参考它的源码自己实现这个逻辑。

lymimt avatar Jul 01 '20 02:07 lymimt

那就采用第一种引用,这几种都是通用的 import * as sylvester from "sylvester"; sylvester.Line 另外看了下你这块库是基于node实现的,能如果上面的引用还是无效的话,估计跑不在浏览器上

那估计就是这个问题了,看来我得参考它的源码自己实现这个逻辑。

上面的哪个报错是引用了fs也就是node的一个库,理论上来说fs是用来处理文件的(本地操作文件),如果你不处理文件,应该用不上这个,可以去源码中把这个屏蔽掉,当然,如果这个库一定要操作,那么肯定没用了

wszgrcy avatar Jul 01 '20 04:07 wszgrcy