Я с трудом пытаюсь импортировать модули lodash. Я настроил свой проект, используя npm + gulp, и продолжаю бить в одну и ту же стену. Я пробовал обычный lodash, но также и lodash-es.
Пакет lodash npm: (в корневом каталоге пакета есть файл index.js)
import * as _ from 'lodash';
Результаты в:
error TS2307: Cannot find module 'lodash'.
Пакет lodash-es npm: (имеет экспорт по умолчанию в lodash.js в корневой папке пакета)
import * as _ from 'lodash-es/lodash';
Результаты в:
error TS2307: Cannot find module 'lodash-es'.
Задача gulp и webstorm сообщают об одной и той же проблеме.
Забавный факт, это не возвращает ошибку:
import 'lodash-es/lodash';
... но, конечно, нет "_" ...
Мой файл tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
},
"exclude": [
"node_modules"
]
}
Мой gulpfile.js:
var gulp = require('gulp'),
ts = require('gulp-typescript'),
uglify = require('gulp-uglify'),
sourcemaps = require('gulp-sourcemaps'),
tsPath = 'app/**/*.ts';
gulp.task('ts', function () {
var tscConfig = require('./tsconfig.json');
gulp.src([tsPath])
.pipe(sourcemaps.init())
.pipe(ts(tscConfig.compilerOptions))
.pipe(sourcemaps.write('./../js'));
});
gulp.task('watch', function() {
gulp.watch([tsPath], ['ts']);
});
gulp.task('default', ['ts', 'watch']);
Если я правильно понимаю, то moduleResolution: 'node' в моем tsconfig должен указывать операторы импорта на папку node_modules, где установлены lodash и lodash-es. Я также пробовал много разных способов импорта: абсолютные пути, относительные пути, но, похоже, ничего не работает. Любые идеи?
При необходимости я могу предоставить небольшой zip-файл для иллюстрации проблемы.
Ответы:
Вот как это сделать с Typescript 2.0: (tsd и typings устарели в пользу следующего):
Затем в вашем файле .ts:
Либо:
Или (как предложено @Naitik):
Я не уверен, в чем разница. Мы используем и предпочитаем первый синтаксис. Однако некоторые сообщают, что первый синтаксис у них не работает, а кто-то другой заметил, что последний синтаксис несовместим с лениво загруженными модулями веб-пакетов. YMMV.
Изменить 27 февраля 2017 г .:
Согласно @Koert ниже,
import * as _ from "lodash";
это единственный работающий синтаксис на Typescript 2.2.1, lodash 4.17.4 и @ types / lodash 4.14.53. Он говорит, что другой предложенный синтаксис импорта выдает ошибку «не имеет экспорта по умолчанию».источник
typescript 2.0.3
. Действительно, удалениеtypings
в пользу@types
пакета npm намного чище.import * as _ from "lodash";
не работает для меня, ноimport _ from "lodash";
работает.import _ from "lodash"
синтаксис несовместим с лениво загруженными модулями веб-пакетов. Не уверен, почему, я не исследовал подробно.npm install --save-dev @types/lodash
если вы видите странные проблемы и ошибки, попробуйте это:npm install --save-dev @types/lodash@4.14.50
Обновление 26 сентября 2016 года:
Как говорится в ответе @ Taytay, вместо установок «typings», которые мы использовали несколько месяцев назад, теперь мы можем использовать:
Вот несколько дополнительных ссылок, подтверждающих этот ответ:
Если вы все еще используете установку для набора текста, смотрите комментарии ниже (от других), касающиеся '' '--ambient' '' и '' '--global' ''.
Кроме того, в новом быстром запуске конфигурации больше нет в index.html; теперь он находится в systemjs.config.ts (если используется SystemJS).
Оригинальный ответ:
Это работало на моем Mac (после установки Angular 2 в соответствии с Quick Start ):
Вы найдете различные файлы, например,
Быстрый запуск Angular 2 использует System.js, поэтому я добавил 'map' в конфигурацию в index.html следующим образом:
Тогда в моем .ts код я смог сделать:
Изменения с середины 2016 года:
Как упоминает @tibbus, в некоторых случаях вам нужно:
Если вы начинаете с angular2-seed , и если вы не хотите импортировать каждый раз, вы можете пропустить карту и импортировать шаги и просто раскомментировать строку lodash в tools / config / project.config.ts.
Чтобы мои тесты работали с lodash, мне также пришлось добавить строку в массив files в karma.conf.js:
источник
map: { lodash: 'node_modules/lodash/lodash.js' }
вSystem.config
?import * as _ from 'lodash'
вместоimport _ from 'lodash'
?--ambient
является бывшим для--global
. Последний используется в 1.x и движется вперед. Хотя я не думаю, что последняя версия lodash 4.x скомпилируется как глобальный модуль.Перво-наперво
npm install --save lodash
npm install -D @types/lodash
Загрузите полную библиотеку lodash
ИЛИ загружайте только те функции, с которыми мы будем работать
UPDATE - March 2017
В настоящее время я работаю с
ES6 modules
, и недавно я смог поработатьlodash
так:ИЛИ
import
конкретныйlodash functionality
:ПРИМЕЧАНИЕ. - разница
* as
не требуется вsyntax
Ссылки:
Удачи.
источник
import debounce from 'lodash/debounce'
даетTS1192: Module node_modules/@types/lodash/debounce has no default export
когда"allowSyntheticDefaultImports": false
"allowSyntheticDefaultImports": true
опции компилятора в ваш файл tsconfig.json может понадобиться, чтобы избежать любой ошибки.Шаг 1: Измените файл package.json, чтобы включить lodash в зависимости.
Шаг 2: Я использую загрузчик модулей SystemJs в своем приложении angular2. Поэтому я бы изменил файл systemjs.config.js для отображения lodash.
Шаг 3: Теперь установите npm
Шаг 4: Чтобы использовать lodash в вашем файле.
источник
Начиная с Typescript 2.0, модули @types npm используются для импорта типизаций.
Теперь, когда на этот вопрос дан ответ, я расскажу, как эффективно импортировать lodash.
Отказоустойчивый способ импортировать всю библиотеку (в main.ts)
Это новый бит здесь:
Внедрение легкого ладаша с нужными вам функциями
источник: https://medium.com/making-internets/why-using-chain-is-a-mistake-9bc1f80d51ba#.kg6azugbd
PS: вышеприведенная статья интересна для чтения по улучшению времени сборки и уменьшению размера приложения.
источник
error TS1192: Module '"node_modules/@types/lodash/chain/index"' has no default export.
И так далее для других модулей, пытающихся сократитьimport chain from "lodash/chain"
импортЯ успешно импортировал lodash в свой проект с помощью следующих команд:
Затем я импортировал его следующим образом:
import * as _ from 'lodash';
и в systemjs.config.js я определил это:
map: { 'lodash' : 'node_modules/lodash/lodash.js' }
источник
У меня была точно такая же проблема, но в приложении Angular2, и эта статья просто решает ее: https://medium.com/@s_eschweiler/using-external-libraries-with-angular-2-87e06db8e5d1#.p6gra5eli
Краткое содержание статьи:
npm install lodash --save
tsd install underscore
<script src="node_modules/lodash/index.js"></script>
System.config({ paths: { lodash: './node_modules/lodash/index.js'
import * as _ from ‘lodash’;
Я надеюсь, что это может быть полезно и для вашего случая
источник
Еще одно элегантное решение - получить только то, что вам нужно, а не импортировать весь лодаш.
а затем использовать его в своем коде
источник
Если кто-то еще сталкивается с этой проблемой, и ни одно из вышеупомянутых решений не работает из-за проблем с «Дублирующим идентификатором», выполните это:
С более старыми версиями набираются вещи, и вы получите кучу проблем с «Дубликатом идентификатора». Также вам не нужно
--ambient
больше использовать , насколько я могу судить.Так что, как только набор текста обновлен, это должно сработать (используя быстрый запуск Angular 2).
Бегать:
Сначала добавьте это в systemjs.config.js:
Теперь вы можете использовать это в любом файле:
import * as _ from 'lodash';
Удалите папку с наборами и запустите,
npm install
если у вас все еще есть проблемы.источник
Обратите внимание, что это
npm install --save
будет способствовать развитию зависимости вашего приложения от производственного кода.Что касается «типирования», то оно требуется только для TypeScript, который в конечном итоге передается в JavaScript. Следовательно, вы, вероятно, не хотите, чтобы они были в рабочем коде. Я предлагаю
devDependencies
вместо этого поместить его в ваш проект , используяили
(см. пост Акаша, например). Кстати, как это сделано в ng2 tuto.
Кроме того, вот как может выглядеть ваш package.json:
просто совет
Хорошая вещь в
npm
том, что вы можете начать с простогоnpm install --save
или,--save-dev
если вы не уверены в последней доступной версии зависимости, которую вы ищете, и она автоматически установит ее для васpackage.json
для дальнейшего использования.источник
Я также создал наборы для
lodash-es
, так что теперь вы можете сделать следующееустанавливать
использование
Если вы используете накопительный пакет, я предлагаю использовать его вместо того, чтобы
lodash
он был корректно изменен.источник
Частичный импорт из lodash должен работать в angular 4.1.x с использованием следующих обозначений:
Или используйте 'lodash-es' и импортируйте в модуль:
источник
import { assign } from 'lodash-es';
кажется, все еще импортирует всю библиотеку (судя по размеру пакета)Установить через
npm
.Теперь
import
в файле:ENV:
источник
sudo npm install typings --global npm install lodash --save typings install lodash --ambient --save
System.config({ packages: { app: { format: 'register', defaultExtension: 'js' } }, map: { lodash: 'node_modules/lodash/index.js' } });
import _ from 'lodash';
источник
$ typings install lodash --ambient --save typings ERR! message https://api.typings.org/entries/npm/lodash/versions/latest responded with 407, expected it to equal 200
Я использую ng2 с webpack, а не систему JS. Шаги, необходимые для меня были:
и затем в файле я хочу импортировать подчеркивание в:
источник
Управление типами с помощью команд
typings
иtsd
команд в конечном итоге не рекомендуется в пользу использования npm черезnpm install @types/lodash
.Однако я долго боролся с «Не могу найти модуль lodash» в операторе импорта:
В конечном итоге я понял, что Typescript будет загружать типы только из node_modules / @ types, начиная с версии 2, и моя служба VsCode Language все еще использовала 1.8, поэтому редактор сообщал об ошибках.
Если вы используете VSCode, вы хотите включить
в вашем файле VSCode settings.json (для настроек рабочего пространства) и убедитесь, что у вас установлена версия> 0.0.0 через
npm install typescript@2.0.2 --save-dev
После этого мой редактор не будет жаловаться на утверждение импорта.
источник
если не работает после
вы попробуете это и импортируете lodash
источник
npm install --save @types/lodash
https://www.npmjs.com/package/@types/lodash
источник
Установите все через терминал:
Добавить пути в index.html
Импортируйте lodash вверху файла .ts
источник
Я использую Angular 4.0.0, используя preboot / angular-webpack , и мне пришлось пойти немного другим путем.
Решение, предоставленное @Taytay, в основном работает для меня:
и импортировать функции в заданный файл .component.ts, используя:
Это работает, потому что нет экспортируемого класса по умолчанию. Разница в том, что мне нужно было найти способ загрузки в сторонние библиотеки: vendor.ts, который находится по адресу:
Мой файл vendor.ts теперь выглядит так:
источник
Может быть, это слишком странно, но ничего из вышеперечисленного не помогло мне, в первую очередь, потому что я правильно установил lodash (также переустановил через вышеупомянутые предложения).
Короче говоря, проблема была связана с использованием
_.has
метода от lodash .Я исправил это, просто используя
in
оператор JS .источник
попробуйте >>
tsd install lodash --save
источник
Вы также можете продолжить и импортировать через старые добрые требования, то есть:
Это единственное, что сработало для нас. Конечно, убедитесь, что любые вызовы require () идут после импорта.
источник