2016-03-23 2 views
8

Прежде всего: Я проверил это:Телосложение: Не удается найти имя Promise - Visual Studio 2015 Вт/MVC6 и угловыми 2

https://github.com/angular/angular/issues/7052

https://github.com/angular/angular/issues/4902

Typescript cannot find name 'Promise' despite using ECMAScript 6

how to use es6-promises with typescript?

Visual Studio Code: Cannot find name angular?

How to get rid of Angular2/TypeScript errors on Cannot find map, Promise ... when targeting -es5

И многое многое другое. Я бил головой уже 2 дня.

И да:

я ссылка в моем файле boot.ts (или загрузочный файл):

///<reference path="../node_modules/angular2/typings/browser.d.ts"/> 

Теперь к проблеме: Я использую Visual Studio 2015 W/Update 1 и проект ASP.NET MVC 6 (Release Candidate 1) + Typcript 1.8.1.

Я использовал этот учебник, чтобы сделать установку: http://www.mithunvp.com/angular-2-in-asp-net-5-typescript-visual-studio-2015/

Я использую Угловые 2 успешно на некоторое время, и теперь тот же самый код (AFAIK) не будет компилироваться. Это даст мне "Не удается найти имя: Promise" в browser.d.ts файл», расположенный в node_modules/angular2/платформы:

tsconfig.json

{ 
    "compilerOptions": { 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "module": "commonjs", 
    "noEmitOnError": true, 
    "noImplicitAny": false, 
    "outDir": "../wwwroot/appScripts/", 
    "removeComments": false, 
    "sourceMap": true, 
    "target": "es5" 
    }, 
    "exclude": [ 
    "node_modules" 
    ] 
} 

package.json

{ 
    "version": "1.0.0", 
    "name": "asp.net", 
    "private": true, 
    "dependencies": { 
    "angular2": "2.0.0-beta.11", 
    "systemjs": "0.19.24", 
    "es6-promise": "^3.1.2", 
    "es6-shim": "^0.35.0", 
    "reflect-metadata": "0.1.2", 
    "rxjs": "5.0.0-beta.2", 
    "zone.js": "0.6.4" 
    }, 
    "devDependencies": { 
    "gulp": "^3.9.1" 
    } 
} 

gulpfile.js

/* 
This file in the main entry point for defining Gulp tasks and using Gulp plugins. 
Click here to learn more. http://go.microsoft.com/fwlink/?LinkId=518007 
*/ 

/// <binding AfterBuild='moveToLibs' /> 

var gulp = require('gulp'); 

gulp.task('default', function() { 
    // place code for your default task here 
}); 

gulp.task('moveToLibs', function() { 
    gulp.src([ 
     'node_modules/angular2/bundles/js', 
     'node_modules/angular2/bundles/angular2.*.js*', 
     'node_modules/angular2/bundles/angular2-polyfills.js', 
     'node_modules/angular2/bundles/http.*.js*', 
     'node_modules/angular2/bundles/router.*.js*', 
     'node_modules/es6-shim/es6-shim.min.js*', 
     'node_modules/angular2/es6/dev/src/testing/shims_for_IE.js', 
     'node_modules/systemjs/dist/*.*', 
     'node_modules/jquery/dist/jquery.*js', 
     'node_modules/bootstrap/dist/js/bootstrap*.js', 
     'node_modules/rxjs/bundles/Rx.js' 
    ]).pipe(gulp.dest('./wwwroot/libs/')); 
}); 

Я даже попытался использовать ссылочный путь в файле node_module/angular2/platform/browser.d.ts, и он сделал ошибку для использования ссылочного пути в немодульных файлах.

Единственное, что работает несколько (я не реализовал его полностью, потому что он безумный): скопируйте и вставьте код внутри файла es6-prom.d.ts во все файлы, которые его просят.

Редактировать SniffSniff Что-то нюхает плохо здесь: я решил переименовать папку node_module в _bak_node_module_folder и переустановить все пакеты:

Severity Code Description Project File Line Suppression State 
Error MSB4018 The "FindConfigFiles" task failed unexpectedly. 
System.IO.PathTooLongException: The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters. 
    at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths) 
    at System.IO.Path.GetDirectoryName(String path) 
    at System.IO.FileSystemEnumerableIterator`1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler, Boolean checkHost) 
    at System.IO.Directory.EnumerateFiles(String path) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherFiles(String directoryPath, String projectPath, Func`2 filter) 
    at TypeScript.Tasks.FileHelpers.RecursiveGatherConfigFiles(String directoryPath, String projectPath) 
    at TypeScript.Tasks.FindConfigFiles.FindConfigFilesOnDisk() 
    at TypeScript.Tasks.FindConfigFiles.Execute() 
    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 
    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() Angular2 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\TypeScript\Microsoft.TypeScript.targets 153 

Я действительно ненавижу этот символ ограничение с Windows. Если это проблема, я думаю, что перейду от самого высокого моста в моем городе.

Редактировать x2 Итак, я решил обновить NPM Visual Studio, как было предложено, и это не сработало. Поэтому я решил захватить Nodejs и запустить его из cmd. К сожалению, эта проблема все еще сохраняется:

Вот результат:

[0] node_modules/angular2/typings/browser.d.ts(6,14): error TS2300: Duplicate identifier 'PromiseConstructor'. 
[0] node_modules/angular2/typings/es6-collections/es6-collections.d.ts(22,5): error TS2300: Duplicate identifier 'done'. 
[0] node_modules/angular2/typings/es6-collections/es6-collections.d.ts(23,5): error TS2300: Duplicate identifier 'value'. 
[0] node_modules/angular2/typings/es6-collections/es6-collections.d.ts(46,5): error TS2300: Duplicate identifier 'size'. 
[0] node_modules/angular2/typings/es6-collections/es6-collections.d.ts(52,5): error TS2300: Duplicate identifier 'prototype'. 
[0] node_modules/angular2/typings/es6-collections/es6-collections.d.ts(66,5): error TS2300: Duplicate identifier 'size'. 
[0] node_modules/angular2/typings/es6-collections/es6-collections.d.ts(72,5): error TS2300: Duplicate identifier 'prototype'. 
[0] node_modules/angular2/typings/es6-collections/es6-collections.d.ts(88,5): error TS2300: Duplicate identifier 'prototype'. 
[0] node_modules/angular2/typings/es6-collections/es6-collections.d.ts(103,5): error TS2300: Duplicate identifier 'prototype'. 
[0] node_modules/angular2/typings/es6-promise/es6-promise.d.ts(11,15): error TS2300: Duplicate identifier 'Promise'. 
[0] node_modules/angular2/typings/es6-promise/es6-promise.d.ts(42,16): error TS2300: Duplicate identifier 'Promise'. 
[0] typings/browser/ambient/es6-shim/index.d.ts(11,5): error TS2300: Duplicate identifier 'done'. 
[0] typings/browser/ambient/es6-shim/index.d.ts(12,5): error TS2300: Duplicate identifier 'value'. 
[0] typings/browser/ambient/es6-shim/index.d.ts(477,11): error TS2300: Duplicate identifier 'Promise'. 
[0] typings/browser/ambient/es6-shim/index.d.ts(496,11): error TS2300: Duplicate identifier 'PromiseConstructor'. 
[0] typings/browser/ambient/es6-shim/index.d.ts(554,13): error TS2300: Duplicate identifier 'Promise'. 
[0] typings/browser/ambient/es6-shim/index.d.ts(563,5): error TS2300: Duplicate identifier 'size'. 
[0] typings/browser/ambient/es6-shim/index.d.ts(572,5): error TS2300: Duplicate identifier 'prototype'. 
[0] typings/browser/ambient/es6-shim/index.d.ts(583,5): error TS2300: Duplicate identifier 'size'. 
[0] typings/browser/ambient/es6-shim/index.d.ts(592,5): error TS2300: Duplicate identifier 'prototype'. 
[0] typings/browser/ambient/es6-shim/index.d.ts(607,5): error TS2300: Duplicate identifier 'prototype'. 
[0] typings/browser/ambient/es6-shim/index.d.ts(621,5): error TS2300: Duplicate identifier 'prototype'. 
[0] 2:47:31 PM - Compilation complete. Watching for file changes. 
+3

Doesn Ответьте на свой первоначальный вопрос, но по отношению к лимиту персонажа - обновили ли вы до NPM v3? Они внесли изменения в то, как хранятся пакеты, что делает эту проблему менее важной. –

+0

Спасибо за ответ. Я в настоящее время обновляю npm через console.js console, дам вам знать, как это происходит. –

+0

@JoeClay: Дерьмо, я все еще застрял в 152 проблемах. С другой стороны, меня поражает, что VS 2015 поставляется с такой низкой версией npm. После его установки все глубокие иерархии были возвращены к основному корню (теперь у меня около 238 пакетов ...) –

ответ

2

Я работала в одной и той же задачи в течение длительного времени в Visual Studio. Я заметил, что если вы не дожидаетесь возврата всех ваших npm-зависимостей до того, как вы попытаетесь построить, вы ставите свой проект в мир обиды.

Мой совет, вернитесь к исходным версиям зависимостей в файле package.json из демонстрационного проекта на mithunvp.com. Дождитесь восстановления зависимостей, а затем перестройте проект VS.

Для проблемы ограничения символов вы должны обновить npm в Visual Studio.
Upgrade npm on Windows

+0

Спасибо за подсказку :) –

4

Я просто столкнулся с этой же проблемой после обновления es-обещания от 3.0.2 до 3.1.2. В конечном итоге я закончил установку новой версии nodejs с более новой версией npm, а затем удалил папку node_module и переустановил пакеты. Затем я добавил ссылочный путь к файлу main.ts или boot.ts (независимо от того, что вы назвали его). Это исправило это.

Как и Стив сказал.

///<reference path="../../node_modules/angular2/typings/browser.d.ts"/> 
+0

Спасибо, я проверю это позже сегодня!Отправляется обратно. –

+1

ДА. ЭТО ПОМОЩИ! Теперь он компилируется в Nodejs, но он не компилируется в Visual Studio @ _ @. Я даже не могу предотвратить его компиляцию при создании проекта. –

0

Я решил эту проблему путем загрузки ES6-shim.d.ts из DefinitelyTyped и ссылаться на него в boot.ts где я angular2 самозагрузки, используя этот код

/// <reference path="../typings/es6-shim/es6-shim.d.ts"/> 

Я также удалить эту ссылку поскольку это создало конфликты.

///<reference path="../../node_modules/angular2/typings/browser.d.ts"/> 

Это решение моих проблем, и мои файлы были скомпилированы правильно, без ошибок.

+0

Я получил этот файл только отсюда: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/es6-shim/es6-shim.d.ts, но теперь дает больше ошибок. –

+0

Это дает мне дубликат идентификатора 'PropertyKey'. Я даже попробовал переустановить все пакеты и ничего:/ –

0

Другим решением является добавление ссылки на

///<reference path="../../node_modules/angular2/typings/browser.d.ts"/> 

в верхней части файла, в котором вы bootstraping Угловое и убедитесь, что вы добавляете

"moduleResolution": "node", 

в «compilerOptions» из ваших tsconfig.json что-то вроде:

{ 
    "compilerOptions": { 
     "target": "es5", 
     "module": "system", 
     "moduleResolution": "node", 
     "emitDecoratorMetadata": true, 
     "experimentalDecorators": true, 
    } 
} 
0

Может быть и другая причина. Я могу воспроизвести вашу ошибку, если не исключаю каталог node_modules. Возможно, вам нужно будет убедиться, что у вас нет файла проекта.

{ 
    "compileOnSave": true, 
    "compilerOptions": { 
     "target": "es5", 
     "module": "system", 
     "moduleResolution": "node", 
     "sourceMap": true, 
     "emitDecoratorMetadata": true, 
     "experimentalDecorators": true, 
     "removeComments": false, 
     "noImplicitAny": false, 
     "noEmitOnError": true 
    }, 
    "exclude": [ 
     "node_modules", 
     "exclude" 
    ] 
} 

Проблема описана здесь: https://github.com/Microsoft/TypeScript/issues/3983. Компиляция Машинопись в основном игнорирует ваши tsconfig.json

0

Моя проблема была вызвана boot.ts/main.ts файл. Вопрос был зафиксирован, добавив в первой строке ссылку на «browser.d.ts» файла:
///<reference path="../node_modules/angular2/typings/browser.d.ts"/>

4

Это решаемой для меня, используя угловую 2.0.0-RC.1: В классе, где вы самонастройки Угловое, поставить эту линию сверху:

/// <reference path="../typings/browser/ambient/es6-shim/index.d.ts"/> 
1

Это то, что установил ее для меня:

///<reference path="./../typings/globals/core-js/index.d.ts"/> 

поверх основного файла .ts.

0

Я не думаю, что решение этой проблемы, добавив ///<reference path""/> к вашему main.ts (или где бы вы не загрузились Angular2), является идеальным решением. Проблема, с которой вы столкнулись, связана с размещением tsconfig.json и скриптом gulp`, который вы используете для настройки вашего проекта Angular2. Прежде чем я смогу больше помочь, можете ли вы проверить следующее?

  1. Вы запустили скрипт npm для установки типизирования (например, установочные файлы), чтобы в вашем проекте была папка с типизированием? Какие папки находятся в папке typings? globals? browser?
  2. Что такое содержимое вашей задачи gulp для компиляции машинописных шрифтов? Вы использовали gulp-typescript или gulp-tsc или что-то еще?

Каталог, содержащий ваш файл tsconfig.json, считается корнем вашего проекта TypeScript. Поэтому любые файлы .ts/.d.ts в рамках вашего проекта TypeScript будут пытаться скомпилироваться (включая файлы в папке typings и/или www/libs.Я вижу, что вы включили «исключить»: ["node_modules"] в ваш tsconfig.json, так что «не удалось найти вопрос название Promise» не приходит из папки node_modules (его, скорее всего, исходящее от typings папки и/или www/libs папку.

Я уверен, что вы решить Cannot find name Promise вопрос, не добавляя ///<reference path""/> в начало вашего файла начальной загрузки (скорее всего, main.ts), добавив дополнительный в свой «исключить» в свой typings.json или ваш gulptask в gulpfile.js.

Не поймите меня неправильно, добавив, что ///<reference path"/> решит вашу проблему, но я не думаю, что это идеальное решение.

2

Этот ES6 вопрос определения типа был кошмар для меня сегодня: Я побежал через много SO ответов, которые пытались обойти эту проблему в ряде направлений, в том числе:

  • Добавить один или более «тройной слэш» ссылки на TS-файл bootstrap, что я действительно не хочу делать, особенно сейчас, когда browser.d.ts больше не включается в Angular2 последних RC.
  • Установите typings и/или загрузите es6-shim.d.ts вручную, что также можно избежать, потому что я ищу решение, которое не заставляет меня выйти за рамки VS2015 GUI.

После долгих исследований I came out with this workaround, который, кажется, решить проблему навсегда с несколько простых шагов:

  • добавить typings в package.json файле проекта.
  • добавить script блок в том же самом package.json файл для выполнения/обновления титров после каждого NPM действие.
  • добавить файл typings.json в корневую папку проекта, содержащую ссылку на core-js (в целом лучше, чем es6-shim atm).

Всё.

Дополнительную информацию о проблеме вы также можете найти в this post.

+1

Я использую бета-версию TypScript 2.0.2 в VS 2015, и эта команда исправила эту проблему: npm install --save @ types/core-js Дополнительная информация здесь - https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/ Теперь я могу, наконец, построить свой проект в VS 2015. – Sergey

0

Upate для VS2015 с Angular2 RC5: (. Этот ответ подразумевает, что вы, как правило, после angular2 Quick Start в angular.io и пытается заставить его работать в проекте VS2015)

Добавьте следующую строку в начало файла main.ts (отрегулируйте путь в соответствии с фактической структурой файла вашего проекта):

/// < reference path = "../ typings/globals/core-js/index. d.ts "/>

Файл с типизированными файлами, указанный выше, автоматически импортируется при сборке на основе содержимого файла typings.json.

Возможно, вам понадобится добавить строку в проект .csproj, чтобы получить проект для компиляции (обновление VS2015 3 в настоящее время игнорирует строку tsconfig.json для «экспериментальных декаторов»). Для этого сначала выгрузите проект, щелкнув правой кнопкой мыши на своем проекте в окне проводника решений и нажав «выгрузить проект». Откройте файл .csproj и найдите узел < PropertyGroup>, содержащий другие элементы < TypScript ...>. Добавить элемент для машинопись экспериментальных декораторов на дне перед закрывающим тегом, как это:

< PropertyGroup Condition = " '$ (Configuration) | $ (Platform)' == 'Debug | AnyCPU'">

...

< TypeScriptExperimentalDecorators> истинный </TypeScriptExperimentalDecorators>

< /PropertyGroup>

Загрузите проект и перестройте его. Теперь он должен компилироваться без ошибок. Если у вас все еще есть проблемы, убедитесь, что установлена ​​последняя версия TypeScript (не менее 1.8.x). В Visual Studio откройте «Инструменты»> «Расширения и обновления» ... и найдите «Тип». Установите расширение «TypeScript 1.8.x для Visual Studio 2015». Также доступно по адресу https://www.microsoft.com/en-us/download/details.aspx?id=48593.

Если у вас установлено nodejs, вы можете установить TypeScript из командной строки, введя команду: «npm install -g typescript». Проверьте установленную версию TypeScript из окна команды Node.js командой «tsc -v».Выполнение этой команды из стандартного командного окна, скорее всего, будет показывать только «Версия 1.0.3.0» вместо ожидаемой версии 1.8.x. (Для получения дополнительной информации см. Как синхронизировать Node.js с VS2015 по адресу http://ryanhayes.net/synchronize-node-js-install-version-with-visual-studio-2015/)

Надеюсь, это кому-то поможет.

0

Я пробовал все возможные предложения здесь и думал, что все должно быть правильно настроено. Ошибки все же появились.

Что помогло в моем случае: Я закрыл все открытые вкладки в Visual Studio и снова построил решение. Эт-вуала, ошибки ушли.

6

REASON для этого является то, что вы ориентируетесь на ES5, у нет Пообещаний. Если вы перейдете на ES6, ошибка будет волшебным образом исчезнуть.

Если вам нужно настроить ES5, просто используйте es6-shim, упомянутый в предыдущих ответах.

0

Для меня вопрос не был специфичным для Angular2, поскольку я на самом деле использую polymerTS. С полисполком Promise я не мог использовать обещания в своих файлах tc-файлов Polymer. Решение для меня заключалось в установке типа Promise из NPM с помощью следующей команды.

Для меня мне даже не понадобилось ссылаться на файл d.ts в файле Polymer ts. Просто сработал. Однако вам может потребоваться просто перетащить файл index.d.ts, расположенный в каталоге es6-prom, в файл, на который вы пытаетесь вызвать объект Promise. Это создаст ссылку для вас автоматически.

Смежные вопросы