Модуль не найден: Ошибка: не удается разрешить «открытые слои» с помощью файла определения TypeScript - PullRequest
0 голосов
/ 09 мая 2018

В приложении Visual Studio 2017 React, использующем TypeScrpt, есть компонент (Map.tsx), который использует OpenLayers v4.6.5.

Файл package.json загружает как @ types / openlayers, так и модуль "ol".

{
  "name": "mhc-maps",
  "private": true,
  "version": "2.0.0",
  "devDependencies": {
    "@types/history": "^4.6.2",
    "@types/jquery": "^3.3.1",
    "@types/openlayers": "^4.6.9",
    "@types/react": "^16.3.5",
    "@types/react-dom": "^16.0.4",
    "@types/react-hot-loader": "^3.0.6",
    "@types/react-router": "^4.0.23",
    "@types/react-router-dom": "^4.2.6",
    "@types/webpack-env": "^1.13.5",
    "aspnet-webpack": "^2.0.3",
    "aspnet-webpack-react": "^3.0.0",
    "awesome-typescript-loader": "^4.0.1",
    "css-loader": "^0.28.11",
    "event-source-polyfill": "^0.0.12",
    "extract-text-webpack-plugin": "^3.0.2",
    "file-loader": "^1.1.11",
    "foundation-sites": "6.4.3",
    "isomorphic-fetch": "^2.2.1",
    "jquery": "^3.3.1",
    "json-loader": "0.5.4",
    "ol": "^4.6.5",
    "react-dom": "^16.3.1",
    "react-hot-loader": "^4.0.1",
    "react-router-dom": "^4.2.2",
    "style-loader": "^0.20.3",
    "typescript": "^2.8.1",
    "url-loader": "^1.0.1",
    "webpack": "^4.5.0",
    "webpack-hot-middleware": "^2.21.2"
  }
}

https://www.npmjs.com/package/@types/openlayers

http://openlayers.org/

Обратите внимание, что файл определения TypeScript находится в / node_modules / @ types / openlayers, а модуль OpenLayers находится в /node_modules/ol.

.

В Map.tsx есть импорт для файла определения типа OpenLayers.

import * as React from 'react';
import * as $ from 'jquery';
import * as ol from 'openlayers';

Различные наборы кода используют определения TypeScript OpenLayers, например

let vectorSource: ol.source.Vector = new ol.source.Vector ({ формат: новый ol.format.GeoJSON (), загрузчик: fnVectorLoader, стратегия: (степень, разрешение) => { возврат [экстент]; } });

и intellisense, ссылающийся на определения типов, работает правильно, указывая, что файл определения находится.

Однако при запуске приложения при инициализации отображается следующая ошибка, когда React загружает все компоненты.

./ClientApp/components/Map.tsx
Module not found: Error: Can't resolve 'openlayers' in 'C:\Users\cp\Documents\Visual Studio 2017\Projects\Maps\Maps.Website\ClientApp\components'
 @ ./ClientApp/components/Map.tsx 13:0-33
 @ ./ClientApp/components/Layout.tsx
 @ ./ClientApp/routes.tsx
 @ ./ClientApp/boot.tsx
 @ multi react-hot-loader/patch event-source-polyfill webpack-hot-middleware/client?path=__webpack_hmr&dynamicPublicPath=true ./ClientApp/boot.tsx

Кажется, папка / node_modules не ищется для модуля OpenLayers, а скорее папка компонентов приложения (\ ClientApp \ components).

Что странно, так это то, что React и jQuery имеют одинаковые файлы определений типов и соответствующие узлы и загружаются без проблем.

Единственное отличие, которое я вижу, заключается в том, что папка определения типа OpenLayers - это / OpenLayers, а папка модуля - / node_modules / ol. Кроме того, в файле определения OpenLayers отсутствует экспорт по умолчанию.

Любые мысли о причине этой проблемы приветствуются!

...