2017-02-01 2 views
19

я использовал, чтобы иметь возможность использовать метод lodash в Угловом с помощью оператора импорта, похожего на следующий:Правильный путь импорта и использования lodash в угловом

import {debounce as _debounce} from 'lodash'; 

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

'"{...}/node_modules/@types/lodash/index"' has no exported member 'debounce'. 

единственное, что будет компилировать без ошибок это утверждение:

import * as _ from 'lodash'; 

В моем коде я меняю _debounce() на _.debounce(). Это единственный (и/или правильный) способ сделать это? Есть ли способ импортировать debounce, или это не имеет значения из-за «treeshaking»? Я понимаю, что могу написать свою собственную функцию дебюта, но меня в основном интересует «правильный» способ сделать это.

p.s. Другие варианты, которые я пробовал (у каждого есть какие-то ошибки, связанные с ним):

import {debounce as _debounce } from 'lodash/debounce'; 
import * as _debounce from 'lodash/debounce'; 
import debounce = require('lodash/debounce'); 

FYI ... Я использую следующие версии:

Angular: 2.4.5

Typescript: 2.1.5

Angular-cli: 1.0.0-beta.26

ответ

33

(если вы заботитесь о дереве встряхивая см обновления)
Я полагаю, для того, чтобы принести lodash в свой проект, который вы уже сделали

npm install lodash --save 
npm install @types/lodash --save-dev 

Если вы хотите импортировать только необходимые функции, которые вы должны сделать:

import * as debounce from 'lodash/debounce' 

или

import { debounce } from "lodash"; 

Используйте его как:

debounce() 

BTW: Вы, возможно, придется понизить ваша типовая версия до 2.0.10, так как вы используете угловой 2.x.

npm install [email protected] --save-dev 

UPDATE:

Недавно я понял, что lodash пакет просто не дерево shakable, так что если вам нужно три встряхивания просто использовать lodash-es вместо этого.

npm install lodash-es --save 
npm install @types/lodash-es --save-dev 

import debounce from 'lodash-es/debounce' 
+0

Да, у меня есть lodash и @ types/lodash. Спасибо за хедз-ап на машинописном тексте. Два примера, которые вы дали, работали для меня, но по какой-то причине они больше не нужны. Например, используя ваш первый пример, я получаю следующую ошибку: Module '"{path_to_project}/node_modules/@ types/lodash/debounce/index" "разрешает немодульный объект и не может быть импортирован с использованием этой конструкции. На данный момент это работает для меня, но мне в основном интересно, как и почему все изменилось. – jloosli

+0

В моем проекте есть '@ types/lodash @ 4.14.44' и' lodash @ 4.17.2'.'import {debounce} из" lodash ";' работает для меня. – Kuncevic

+0

Вы также можете ссылаться на функцию _ как {цепочка}. – alalonde

0

У меня была такая же проблема, и она начала работать после того, как я изменил «@ types/lodash» на версию «4.14.50».

+1

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/17910953) –

+1

@MohanGopi Где ссылка? –