Модуль не найден: ошибка: не удается разрешить модуль «@types/lodash»

Я застрял и ищу помощи.

Я не уверен, где проблема на самом деле, но я надеюсь найти ответ. ????

Сведения о проблеме

Я установил @types/lodash с помощью следующей команды:

npm install --save-dev @types/lodash

И импортировал lodash в мой файл .ts, используя:

import * as _ from '@types/lodash';

Когда я запускаю веб-пакет, я получаю следующую ошибку:

ERROR in ./app/scripts/Components/GameBoard.ts
Module not found: Error: Cannot resolve module '@types/lodash' in /Users/mjelaska/Documents/DevProjects/connect-four/src/app/scripts/Components
 @ ./app/scripts/Components/GameBoard.ts 3:8-32

Затем я попытался получить более подробную информацию с помощью

webpack --display-error-details

и получил ⇣

ERROR in ./app/scripts/Components/GameBoard.ts
Module not found: Error: Cannot resolve module '@types/lodash' in /Users/mjelaska/Documents/DevProjects/connect-four/src/app/scripts/Components
resolve module @types/lodash in /Users/mjelaska/Documents/DevProjects/connect-four/src/app/scripts/Components
  looking for modules in /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules
    resolve 'file' or 'directory' lodash in /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types
      resolve file
        /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash.webpack.js doesn't exist
        /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash is not a file
        /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash.web.js doesn't exist
        /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash.ts doesn't exist
        /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash.js doesn't exist
      resolve directory
        directory default file index
          resolve file index in /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash
            /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index doesn't exist
            /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index.webpack.js doesn't exist
            /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index.web.js doesn't exist
            /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index.ts doesn't exist
            /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index.js doesn't exist
        use  from package.json
          resolve 'file' or 'directory' /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash
            resolve file
              /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash is not a file
              /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash.webpack.js doesn't exist
              /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash.web.js doesn't exist
              /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash.ts doesn't exist
              /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash.js doesn't exist
            resolve directory
              use  from package.json
                abort resolving because of recursion
              directory default file index
                resolve file index in /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash
                  /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index doesn't exist
                  /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index.webpack.js doesn't exist
                  /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index.web.js doesn't exist
                  /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index.ts doesn't exist
                  /Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index.js doesn't exist
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash.webpack.js]
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash.web.js]
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash.ts]
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash.js]
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index]
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index.webpack.js]
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index.web.js]
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index.ts]
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index.js]
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash.webpack.js]
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash.web.js]
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash.ts]
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash.js]
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index]
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index.webpack.js]
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index.web.js]
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index.ts]
[/Users/mjelaska/Documents/DevProjects/connect-four/src/node_modules/@types/lodash/index.js]
 @ ./app/scripts/Components/GameBoard.ts 3:8-32

Сведения о настройке

package.json (без лишней информации)

{
  "devDependencies": {
    "@types/lodash": "^4.14.47",
    "@types/node": "^6.0.55",
    "@types/pixi.js": "^4.3.1",
    "npm": "^4.0.5",
    "ts-loader": "^1.3.3",
    "typescript": "^2.1.4",
    "webpack": "^1.14.0"
  }
}

tsconfig.json

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es5",
        "noImplicitAny": true,
        "sourceMap": false,
        "removeComments": true,
        "typeRoots": [
          "./node_modules/@types"
        ]
    },
    "files": [
      "./app/scripts/main.ts"
    ]
}

webpack.config.js

module.exports = {
    entry: './app/scripts/main.ts',
    output: {
        filename: './build/scripts/main.js'
    },
    resolve: {
        extensions: ['', '.webpack.js', '.web.js', '.ts', '.js']
    },
    module: {
        loaders: [
            {
                test: /\.ts$/,
                loader: 'ts-loader'
            }
        ]
    }
};

Детали среды

node: v6.9.4
npm: v4.0.5
webpack: v1.14.0 (as seen in `package.json`, installed also globally)

Проект на момент возникновения проблемы: https://github.com/MiroslavJelaska/connect-four/tree/4941ca792096602831940f76fa350e461808a8c5

⬆️ Обновление №1

Установка lodash в зависимости вместо devDependencies не помогает:

npm install --save @types/lodash

person kr85    schedule 08.01.2017    source источник
comment
Может быть, я никогда раньше этого не видел, но, насколько я знаю, вы просто устанавливаете lodash таким образом (исходя из того, что я видел/сделал, и в соответствии с документом по npm): $ npm i -g npm $ npm i --save lodash Тогда вы просто импортируете lodash. Какова цель @types? Кажется, это сбрасывает разрешение модуля в вашем приложении.   -  person Tim Consolazio    schedule 08.01.2017
comment
@TimConsolazio Я пытался установить с помощью --save, но это не имеет значения. @types — это префикс проекта DefinitelyTyped для определений типов TypeScript. Вот репозиторий GitHub: github.com/DefinitelyTyped/DefinitelyTyped   -  person kr85    schedule 08.01.2017
comment
Вы пытались установить его, просто используя базовую команду npm install lodash --save-dev, а затем просто импортировав его как есть без материалов DefinitelyTyped. Может быть, вещь DefinitelyTyped (о которой я ничего не знаю) отбрасывает его. Обратите внимание, что эти детали (то, что вы делаете что-то помимо базовой установки) помогут, на самом деле это может быть проблема DefinitelyTyped (что бы она ни делала/должна была делать).   -  person Tim Consolazio    schedule 08.01.2017
comment
@TimConsolazio Можете ли вы написать полное заявление об импорте, которое вы имели в виду?   -  person kr85    schedule 08.01.2017
comment
Я только что взглянул на .md указанного вами проекта. Вы уверены, что это работает в Angular 2? Насколько я понимаю, документ говорит только об Angular JS. Поиск по всему документу приводит только к Angular JS, нигде нигде не говорится об Angular 2, Angular2 и т. д. Иногда кажется, что речь идет об Angular 2, но, насколько я могу судить, он никогда не говорит об этом ясно.   -  person Tim Consolazio    schedule 08.01.2017
comment
Это может быть ваш ответ, посмотрите здесь: stackoverflow .com/questions/38544282/   -  person Tim Consolazio    schedule 08.01.2017
comment
@TimConsolazio Вы имеете в виду DefinitelyTyped? Он не привязан к Angular 2. Он предоставляет определения TS для сотен библиотек и фреймворков. Ответ SO, который вы предоставили, имеет совершенно другую конфигурацию, чем мой проект, и, насколько я могу судить, не подходит. Кроме того, я не использую Angular в своем проекте. Репозиторий проекта можно найти по адресу: github.com/MiroslavJelaska/connect-four.   -  person kr85    schedule 08.01.2017
comment
Файлы объявлений — это определения типов для Typescript, которые должны использоваться во время компиляции, а не для использования в вашем проекте. npm i -D lodash и import * as _ from 'lodash', чтобы использовать lodash в своем проекте. Когда вы устанавливаете @types/lodash, он будет автоматически использоваться TypeScript.   -  person jal    schedule 08.01.2017
comment
Это означает, что с TypeScript вам нужны оба. lodash для вашего проекта и @types/lodash для TypeScript, чтобы знать, как компилировать lodash.   -  person jal    schedule 08.01.2017
comment
Я понятия не имел, что такое DefinitelyTyped, но предположил, что он установлен правильно.   -  person Tim Consolazio    schedule 08.01.2017


Ответы (1)


Вам нужен фактический пакет lodash (который содержит код JS, который является lodash), а также вам нужен пакет @types/lodash, который предоставляет определения типов для пакета lodash (по сути, он сообщает TypeScript, что находится в пакете lodash).

Итак, вы хотите запустить обе эти команды, чтобы получить эти два пакета:

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

Затем в своем коде вы импортируете его как таковой:

import * as _ from 'lodash';

_.zip(array1, array1); // or whatever
person JKillian    schedule 09.01.2017
comment
Итак, я столкнулся с аналогичной проблемой с «exceljs». У меня есть как exceljs, так и @types/exceljs, а мой оператор импорта - import * as Excel from 'exceljs';, но я все еще получаю модуль, не найденный, не могу устранить ошибку... - person Oliver; 06.10.2017