Учебник Angular2 (Tour of Heroes): не удается найти модуль 'angular2-in-memory-web-api'
Я следил за учебник. После изменения app/maint.ts В главе Http я получаю ошибку при запуске приложения через командную строку:
app / main.ts (5,51): ошибка TS2307: не удается найти модуль 'angular2-in-memory-web-api'.
(код Visual Studio дает мне ту же ошибку в main.ts - красное волнистое подчеркивание.)
вот мой systemjs.config.js:
/**
* System configuration for Angular 2 samples
* Adjust as necessary for your application needs.
*/
(function(global) {
// map tells the System loader where to look for things
var map = {
'app': 'app', // 'dist',
'@angular': 'node_modules/@angular',
'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api',
'rxjs': 'node_modules/rxjs'
};
// packages tells the System loader how to load when no filename and/or no extension
var packages = {
'app': { main: 'main.js', defaultExtension: 'js' },
'rxjs': { defaultExtension: 'js' },
'angular2-in-memory-web-api': { defaultExtension: 'js' },
};
var ngPackageNames = [
'common',
'compiler',
'core',
'http',
'platform-browser',
'platform-browser-dynamic',
'router',
'router-deprecated',
'upgrade',
];
// Add package entries for angular packages
ngPackageNames.forEach(function(pkgName) {
packages['@angular/'+pkgName] = { main: pkgName + '.umd.js', defaultExtension: 'js' };
});
var config = {
map: map,
packages: packages
}
System.config(config);
})(this);
вот мой app/main.ts:
// Imports for loading & configuring the in-memory web api
import { provide } from '@angular/core';
import { XHRBackend } from '@angular/http';
import { InMemoryBackendService, SEED_DATA } from 'angular2-in-memory-web-api';
import { InMemoryDataService } from './in-memory-data.service';
// The usual bootstrapping imports
import { bootstrap } from '@angular/platform-browser-dynamic';
import { HTTP_PROVIDERS } from '@angular/http';
import { AppComponent } from './app.component';
bootstrap(AppComponent, [
HTTP_PROVIDERS,
provide(XHRBackend, { useClass: InMemoryBackendService }), // in-mem server
provide(SEED_DATA, { useClass: InMemoryDataService }) // in-mem server data
]);
29 ответов:
для меня единственным решением было обновить
angular2-in-memory-web-apiдо0.0.10.на
package.jsonset'angular2-in-memory-web-api': '0.0.10'в блоке dependecies и в
systemjs.config.jsset'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' }на
Что касается проектов, созданных с использованием текущих инструментов CLI, он работал для меня, установив
npm install angular-in-memory-web-api --saveа затем выполнение импорта как
import { InMemoryWebApiModule } from 'angular-in-memory-web-api/in-memory-web-api.module';мой пакет.json
> "dependencies": { > "@angular/common": "^2.4.0", > "@angular/compiler": "^2.4.0", > "@angular/core": "^2.4.0", > "@angular/forms": "^2.4.0", > "@angular/http": "^2.4.0", > "@angular/platform-browser": "^2.4.0", > "@angular/platform-browser-dynamic": "^2.4.0", > "@angular/router": "^3.4.0", > "angular-in-memory-web-api": "^0.3.1", > "core-js": "^2.4.1", > "rxjs": "^5.1.0", > "zone.js": "^0.7.6" }, > "devDependencies": { > "@angular/cli": "1.0.0-rc.4", > "@angular/compiler-cli": "^2.4.0", > "@types/jasmine": "2.5.38", > "@types/node": "~6.0.60", > "codelyzer": "~2.0.0", > "jasmine-core": "~2.5.2", > "jasmine-spec-reporter": "~3.2.0", > "karma": "~1.4.1", > "karma-chrome-launcher": "~2.0.0", > "karma-cli": "~1.0.1", > "karma-jasmine": "~1.1.0", > "karma-jasmine-html-reporter": "^0.2.2", > "karma-coverage-istanbul-reporter": "^0.2.0", > "protractor": "~5.1.0", > "ts-node": "~2.0.0", > "tslint": "~4.5.0", > "typescript": "~2.0.0" }
вот что сработало для меня:
Я заметил, что пакет.json имел следующую версию:
"угловые2 - in-memory-web-api":"0.0.20"
обратите внимание на "2" во имя.
однако при ссылке на InMemoryWebApiModule он использовал "angular-in-memory-web-api" без 2 в имени. Поэтому я добавил его, и это решило проблему:
импорт { InMemoryWebApiModule } из 'angular2-in-memory-web-api';
Примечание: Я нашел это в разделе Уведомления https://github.com/angular/in-memory-web-api
Как В. 0.1.0, НПМ пакет был переименован из angular2-in-memory-web-api к его текущему имени, angular-in-memory-web-api. Все версии после 0.0.21 погружены вниз это имя. Обязательно обновите свой пакет.операторы json и import.
Угловые 4 Изменения
по состоянию на 17 октября 2017 года в учебнике не упоминается, что
angular-in-memory-web-apiне входит в стандартную сборку CLI, и должен быть установлен отдельно. Это можно легко сделать с помощьюnpm:
$ npm install angular-in-memory-web-api --saveэто автоматически обрабатывает необходимые изменения в
package.json, Так что вам не нужно вносить изменения самостоятельно.заблуждение
этот поток довольно запутан, поскольку угловой CLI имеет значительно изменился с момента запуска этого потока; проблема со многими быстро развивающимися API.
angular-in-memory-web-apiбыл переименован; он отбрасывает 2 от угловой2 простоangular- угловой CLI больше не использует SystemJS (замененный Webpack), поэтому
systemjs.config.jsбольше не существует.npm' spackage.jsonне следует редактировать непосредственно; используйте CLI.решение
по состоянию на Октябрь 2017, Лучшее исправление-просто установить его самостоятельно с помощью
npm, Как я уже упоминал выше:
$ npm install angular-in-memory-web-api --saveудачи!
в настоящее время я делаю учебник и имел аналогичную проблему. То, что, кажется, исправило это для меня, определяет основной файл для
'angular2-in-memory-web-api'наpackagesпеременнаяsystemjs.config.js:'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' },прежде чем я добавил Это, была ошибка 404 для
/node_modules/angular2-in-memory-web-api/где он, казалось, пытался загрузить файл JavaScript. Теперь он загружает/node_modules/angular2-in-memory-web-api/index.jsи другие файлы в этом модуле.
это работает для меня:
в пакет.JSON в зависимости блок набор ( использовать "угловые", а не "angular2")
выполнить"angular-in-memory-web-api": "^0.3.2",npm installили
просто просто запустите (мой предпочтительный)
npm install angular-in-memory-web-api --save
это решило проблему 404
из документации Angular in-memory-web-api
всегда импортируйте InMemoryWebApiModule после HttpModule, чтобы убедиться, что поставщик XHRBackend InMemoryWebApiModule заменяет все остальные.
модуль импорта должен иметь InMemoryWebApiModule перечислены после HttpModule
@NgModule({ imports: [ BrowserModule, AppRoutingModule, FormsModule, HttpModule, InMemoryWebApiModule.forRoot(InMemoryDataService), ...
из корневой папки (папка содержит пакет.json), используя:
npm install angular-in-memory-web-api –-save
самое простое решение, которое я мог придумать, это установить пакет с npm и перезапустить сервер:
npm install angular-in-memory-web-api --saveя почти установлена angular2-in-memory-web-api пакета, но страница npm говорит:
все версии после 0.0.21 (или скоро будут) погружены вниз angular-in-memory-web-api.
Примечание: это решение работало для проекта, который был создан с помощью CLI инструменты, которые не перечисляют пакет как зависимость и могут не решить проблему для проектов, созданных с помощью начального элемента быстрого запуска, который перечисляет пакет как зависимость.
Это была настоящая вонючка. Благодаря @traneHead, @toni и другим, эти шаги сработали для меня.
- обновление
angular2-in-memory-web-apiдо0.0.10- измените свойство переменной packages в
systemjs.config.js:
angular2-in-memory-web-api': { main: 'core.js', defaultExtension: 'js' }
Я создаю свой проект с помощью angular-cli и устанавливаю в пакет.json "angular-in-memory-web-api": "^0.2.4" в блоке зависимостей, а затем я запускаю установку npm.
Работа для меня :D
для пользователей, которые создали пустой проект с angular cli 1.4.9 (фактический на октябрь 2017 года), а затем начали следовать инструкциям шаг за шагом, просто выполните следующую команду:
npm i angular-in-memory-web-apiтолько эта команда, без чего-либо дополнительного.
надеюсь, что это экономит чье-то время
если вы используете угловой cli, вы получите эту ошибку.
пожалуйста, добавьте
'angular2-in-memory-web-api'наconst barrelsв системе-config.файл TS, как показано ниже:const barrels: string[] = [ // Angular specific barrels. '@angular/core', '@angular/common', '@angular/compiler', '@angular/forms', '@angular/http', '@angular/router', '@angular/platform-browser', '@angular/platform-browser-dynamic', // Thirdparty barrels. 'rxjs', 'angular2-in-memory-web-api', // App specific barrels. 'app', 'app/shared', /** @cli-barrel */ ];и добавить
'angular2-in-memory-web-api': 'vendor/angular2-in-memory-web-api'как ниже.System.config({ map: { '@angular': 'vendor/@angular', 'rxjs': 'vendor/rxjs', 'main': 'main.js', 'angular2-in-memory-web-api': 'vendor/angular2-in-memory-web-api' }, packages: cliSystemConfigPackages, });восстановить с помощью
npm start. Это решило проблему для меня.
попробуйте добавить определения typescript:
sudo typings install --save file:./node_modules/angular2-in-memory-web-api/in-memory-backend.service.d.ts... указание имени зависимости:
angular2-in-memory-web-apiзатем добавьте точку входа для "angular2-in-memory-web-api" в / systemjs.конфиг.js
var packages = { ... 'angular2-in-memory-web-api': { main: 'core.js', defaultExtension: 'js' } };
у меня была та же проблема, я изменил в systemjs.config:
'angular2-in-memory-web-api': { defaultExtension: 'js' },эта строка :
'angular2-in-memory-web-api': { main: 'core.js', defaultExtension: 'js' },
изменение этой строки, как было предложено выше, работало для меня в учебнике Angular 2 Heroes:
'angular2-in-memory-web-api': { main: 'core.js', defaultExtension: 'js' },
я решил это копирование
index.jsиindex.d.tstocore.jsиcore.d.ts, что находится внутри . Иди разберись.
основной ответ помог мне: изменить
'angular2-in-memory-web-api': { defaultExtension: 'js' },до
'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' }
в приложении\main.ТС просто изменить:
import { InMemoryBackendService, SEED_DATA } from 'angular2-in-memory-web-api';to:
import { InMemoryBackendService, SEED_DATA } from '../node_modules/angular2-in-memory-web-api';затем добавить индекс.параметр JS в
var packages = { 'app': { main: 'main.js', defaultExtension: 'js' }, 'rxjs': { defaultExtension: 'js' }, 'angular2-in-memory-web-api': { main:'index.js', defaultExtension: 'js' } };в systemjs.конфиг.js
это работает для меня.
последнее исправление на эту дату-это
- заменить все экземпляры "angular2-в-памяти-веб-API" с "угловой-в-памяти-веб-АФИ".
- пакета изменений.версия зависимости json от
"angular-in-memory-web-api": "0.0.20"до"angular-in-memory-web-api": "0.1.0"и"zone.js": "^0.6.23"до"zone.js": "^0.6.25"- в systemjs.конфиг.js, измените путь для индекса.js. Это должно выглядеть так:
'angular-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' }
по состоянию на последнюю версию (в настоящее время 0.1.14), это то, что указано в
CHANGELOGна
systemjs.config.jsвы должны изменить сопоставление:'angular-in-memory-web-api': 'npm:angular-in-memory-web-api/bundles/in-memory-web-api.umd.js'затем удалить с
packages:'angular-in-memory-web-api': { main: './index.js', defaultExtension: 'js' }
я получил эту ошибку, потому что я импортировал
InMemoryWebApiModuleСangular2-in-memory-web-apiЯ удалил 2. На самом деле у меня было две записи в моем пакете.файл JSON; один былangular2-in-memory-web-apiи второйangular-in-memory-web-api. Используяangular-in-memory-web-apiрешил проблему для меня. Поэтому ваш импорт должен быть таким:import { InMemoryWebApiModule } from 'angular-in-memory-web-api'; ... @NgModule({ imports: [ InMemoryWebApiModule.forRoot(InMemoryDataService) ] })используя cli-angular вам не нужно ничего менять относительно
system.config.js.
для меня просто делает установку из каталога angular-tour-of-heroes работает для меня
C:\nodejs\angular-tour-of-heroes > npm install angular-in-memory-web-api --save
лучший способ-установить его с помощью NPM e. G
npm install git+https://github.com/itryan/in-memory-web-api/ -- save
Он добавит необходимую ссылку
я столкнулся с подобной проблемой. Я просто скачал весь пример ближе к концу части 7 (Последняя часть) учебника и запустил его. Это сработало.
конечно, вам нужно сначала установить и скомпилировать все.
> npm install > npm startЯ также изменил "app-root" на "my-app" в приложении.деталь.ТС.
при использовании угловых командной строки для построения вашего приложения angular2, включая angular2-в-памяти-веб-интерфейс API состоит из трех этапов:
добавьте api в system-config.ts файл (внутри подкаталога src), как показано ниже:
/** Map relative paths to URLs. */ const map: any = { 'angular2-in-memory-web-api': 'vendor/angular2-in-memory-web-api' }; /** User packages configuration. */ const packages: any = { 'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' } };добавить
angular2-in-memory-web-api/**/*.+(js|js.map)'к массиву vendorNpmFiles в angular-cli-build.JS файл, как ofShard упоминалось;
конечно, добавить в пакет.JSON как описанный traneHead; для 2.0.0-rc.3 я использую версию ниже:
"angular2-in-memory-web-api": "0.0.13"это ссылке "добавление material2 в ваш проект" довольно четко объясняет процесс добавления сторонних библиотек.
import { InMemoryBackendService, SEED_DATA } from 'angular2-in-memory-web-api'; import { InMemoryDataService } from './in-memory-data.service';The
InMemoryDataServiceкласс не подпадает под какой-либо API. Нам нужно создать класс обслуживания, а затем импортировать этот класс обслуживания в приложение.модуль.файл ТС.
Тони, Вам нужно добавить типизации для Angular2-in-memory-web-api.
добавьте их в файл TS.
/// reference path=”./../node_modules/angular2-in-memory-web-api/typings/browser.d.ts”
Comments