2016-02-17 3 views
0

Я хочу использовать модуль JavaScript (ES2015) в своем проекте Ember.js, но он не работает.Как импортировать модуль JavaScript ES2015 в проект Ember.js?

Я написал простой пример ES6 JavaScript файл,

myES6lib.js

export default function square(b) { 
    return b * b; 
}; 

Следуя MANAGEMENT DEPENDENCES, я побежал

ember generate vendor-shim myES6lib 

и добавил строку в Ember-CLI-сборки .js

app.import("vendor/shims/myES6lib.js"); 

Я тогда назвал квадратную функцию в Ember контроллер

import MyES6lib from "myES6lib"; 
... 
console.log("Square(5) = " + MyES6lib.square(5)); 

, но я получил сообщение об ошибке следующим образом:

Uncaught TypeError: _myES6lib.default.square is not a function 

Любые намеки оценены, спасибо заранее.

Примечание: Я попытался преобразовать myES6lib в код ES5 от Babel, но результат был таким же.

+0

Вы только когда-нибудь понадобится поставщика подкладку для Бауэр пакетов, ваш модуль пакет становой? –

+0

Спасибо Китлер. Я думаю, что мой модуль не пакет bower, это просто файл js. – Calvin

+0

В это время я могу использовать свой собственный код в качестве файла утилиты в проекте Ember.js в соответствии с способом, указанным в вашем ответе. Я узнаю пакет bower, как вы упомянули, я думаю, что он должен быть преобразован в пакет bower, если я хочу поделиться своим кодом в другом проекте. наконец, вы могли бы рассказать мне, почему вы удалили тег ES6, спасибо за вашу помощь. – Calvin

ответ

1

Ваша функция больше похожа на функцию полезности , переместите его на yourApp/utils/square, вам не нужно указывать функцию в этом случае, так как она единственная в файле:

export default function(b) { 
    return b * b; 
}; 

А потом просто импортировать его в файле:

import myCustomSquare from 'myApp/utils/square'; 

И использовать его myCustomSquare(2);

Несколько функций в файле:

Вы бы следовать той же логике, как и для одного файла, за исключением внутри в котором вы будете экспортировать каждую функцию:

export function square(b) { 
    //your logic goes here 
} 

export function myOtherCustomFunction(b) { 
    //your logic goes here 
} 

И от вашего контроллера/в любом месте иначе вы бы импортировать его следующим образом:

import { square, myOtherCustomFunction } from 'myApp/utils/myCustomFunctions'

+0

Спасибо, Китлер. Этот файл будет содержать другие функции, и я хочу использовать этот файл в проекте ember.js (есть а не папка utils. – Calvin

+0

@Calvin В этом случае я обновляю ответ, вы можете создать папку utils, в которой она не поставляется с шаблоном –

+1

@Kitler @Calvin. Вы можете сгенерировать шаблон. 'ember g util square' Это также удобно создает тест. – Gaurav

2

Ваш экспорт по умолчанию является square функцией, поэтому вместо того, чтобы назвать это так:

console.log("Square(5) = " + MyES6lib.square(5)); 

Вы должны назвать это так:

console.log("Square(5) = " + MyES6lib(5)); 
+0

Спасибо, Джо. Я пытался. но это не сработало.Появилось сообщение об ошибке: «Uncaught TypeError: (0, _MyES6lib.default) не является функцией». – Calvin

+0

Я также попытался «импортировать {квадрат] из« myES6lib »;» и «+ square (5)», то сообщение об ошибке стало следующим: «Uncaught TypeError: (0, _import.square) не является функцией». – Calvin

+0

Hm, это странно. Надеюсь, кто-то посмеет с решением тогда, я не понимаю, почему это не должно работать. D: –

Смежные вопросы