【问题标题】:Can't find module 'hbs' with ES6 style import找不到带有 ES6 样式导入的模块“hbs”
【发布时间】:2015-10-23 10:27:27
【问题描述】:

我在 TypeScript 中执行此操作,但在 vanilla JS 中也尝试过同样的错误。我已经删除了两个模块:expresshbs。我正在尝试像这样使用 ES6 import 语法:

import * as http from 'http';
import * as express from 'express';
import hbs from 'hbs'; 

最后一行给我一个错误,说它找不到模块 hbs。我正在看它...我可以看到它很好。但是,当我用旧的 CommonJS 语法替换该行时:

var hbs = require('hbs');

它工作得很好......什么给了?仍在使用 ES6 的学习曲线...

【问题讨论】:

  • 你试过import {hbs} from 'hbs';吗?
  • 是的...错误总是在'hbs' 部分(您指定模块名称的右侧)...它总是说找不到模块。
  • 有意思,能把导出模块的hbs中的代码贴出来吗?

标签: javascript typescript ecmascript-6 typescript1.6


【解决方案1】:

观察 1... 就像您在其他导出中一样,您应该使用别名导入整个模块:

import * as hbs from 'hbs';

或者您可以选择导入特定的导出:

import {thing} from 'hbs';

观察 2...hbs 是 TypeScript 模块还是 JavaScript 模块?如果它是 JavaScript 的(我相信它可能是),则需要将其与定义文件配对,例如描述 JavaScript 文件的hbs.d.ts。 TypeScript 无法识别没有定义的纯 JavaScript 模块。

【讨论】:

  • 这是一个没有关联类型定义的 JS 库......但我知道这不是必需的。我可以使用这种语法来导入 ExpressJS,它是一个 JS 库并且没有问题。我尝试了其他两种语法,但它们也不起作用。这是因为无法“看到”图书馆 hbs,就像它不存在一样。
  • 您知道不需要类型定义吗?目前编译器似乎同意我的看法:)
  • 不确定我是否理解您的回复...如果我删除 Express 的类型 def,它会起作用。
【解决方案2】:

我遇到了类似的问题。语法确实是正确的 ES6。 好消息是这个问题似乎已经在 typescript 编译器 0.8 的开发版本中得到修复:尝试 'npm install typescript@next -g' 然后再次运行编译器。

【讨论】:

    【解决方案3】:

    你应该使用 default 作为导入的模块名称。

    import {default as hbs} from "hbs";
    

    这与

    var hbs = require('hbs'); 
    

    因为 require("hbs") 导入了 hbs 导出的默认模块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 2018-06-21
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      • 2017-01-04
      相关资源
      最近更新 更多