【问题标题】:TypeScript cannot find module decimal.js - but absolute path worksTypeScript 找不到模块 decimal.js - 但绝对路径有效
【发布时间】:2018-01-10 05:36:30
【问题描述】:

我正在使用typescriptnode。我可以毫无问题地写这个:

import * as $ from "jquery";

jquery 的定义文件位于node_modules/@types/jquery。但是,对于decimal.jsnode_modules/decimal.js 中的定义文件,以下任何一项都不起作用:

import { Decimal } from "decimal";
import { Decimal } from "decimal.js";

但是,如果我包含带有绝对路径的文件,它就像一个魅力:

import { Decimal } from "/path/to/project/node_modules/decimal.js/decimal";

我正在使用npm 中提供的最新版本以及这些命令行参数:

--removeComments --inlineSourceMap --inlineSources --allowSyntheticDefaultImports --charset UTF-8 --module amd --target ES6 --newLine LF --moduleResolution classic

【问题讨论】:

  • decmial.js目录下有index.js文件,decimal.js的package.json中有main属性吗?
  • @MaxGaurav 在该目录中有一个decimal.d.ts 文件

标签: node.js typescript npm import decimal.js


【解决方案1】:

考虑到您的模块在node_modules 中,您希望使用node 样式的模块解析。将--moduleResolution classic 替换为--moduleResolution Node

here

但是,非相对模块名称的解析方式不同。 Node 将在名为 node_modules 的特殊文件夹中查找您的模块。 node_modules 文件夹可以与当前文件处于同一级别,或者在目录链中更高。 Node 会沿着目录链向上走,遍历每个 node_modules,直到找到您尝试加载的模块。

经典风格以不同的方式解析模块。根据链接来源:

这曾经是 TypeScript 的默认解析策略。如今,这种策略主要是为了向后兼容。

【讨论】:

  • 你知道有没有办法告诉打字稿编译器输出decimal而不是decimal.js?似乎require.js 将第一个相对于脚本路径和后一个相对于 html 路径处理
  • 我不确定这意味着什么:“似乎 require.js 将第一个相对于脚本路径和后一个相对于 html 路径。”编译器应该编译为 javascript,所以我不确定你为什么不希望文件属于那种类型。您可能想查看--outFile 标志。
  • 哦,我希望 typescript 输出 define(...decimal...) 而不是 define(...decimal.js...),因为第一个 require.js 加载 /static/decimal.js,第二个它尝试 ./decimal.js
  • @msrd0 Here 是编译器选项列表。我没有看到您想要的选项,我也不希望有这样的选项。坦率地说,我真的不明白这个问题。您是说默认情况下,当您从decimal 导入时,它仍然找不到正确的,因为它在错误的地方寻找?还是只有在您使用require 时才会发生这种情况?
  • 我是说require.js 对待以.js 结尾的依赖项与没有结束的依赖项不同,但我认为这是require.js 的问题而不是打字稿 - 只是好奇打字稿是否可以提供解决方法,因为require.js 似乎忽略了配置选项
猜你喜欢
  • 2018-10-14
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 2023-04-07
  • 2019-03-31
  • 1970-01-01
相关资源
最近更新 更多