我正在尝试将此模块导入Ember.js(2.5版)应用程序:

https://github.com/hapijs/nes/blob/master/lib/client.js

这就是我的做法(docs之后):

app.import('bower_components/nes/lib/client.js', { exports: { 'nes': ['default', 'client'] } });


以及进口报关单:

import client from 'nes';


现在,我不断收到以下错误:


  loader.js:201未捕获的错误:找不到导入的模块nes
  来自myapp.com/components/chart-widget


我认为import语句是正确的,并且实际模块不会以Ember可以使用的方式导出自身。但是,我该如何解决?有没有办法像这样的第三方库编写包装器?

最佳答案

TL:DR您的模块可以使用nes.Client作为全局变量访问。

您正在查看指南中的错误部分。 hapijs/nes不是标准的AMD资产,因此不能使用import关键字直接导入。这意味着将在全局上下文中找到您的库。

通过bower_components/nes/lib/client.js调试将显示代码在这种情况下正在分支:https://github.com/hapijs/nes/blob/master/lib/client.js#L24

您可以简单地通过名为nes.Client的全局变量访问第三方模块。

如果您想使用ES6 import关键字来访问它以更加清楚,可以按照指南https://ember-cli.com/user-guide/#managing-dependencies中的描述生成供应商填充程序。

请注意,这不会从全局上下文中删除nes,而仅允许您使用import关键字将其导入。

09-15 13:55