Подтвердить что ты не робот

Angular2 5-минутная ошибка установки - запрос не определен

Я делаю Angular2 5-минутный быстрый старт.

Примерно на полпути через учебник у меня установлены следующие файлы:

  • index.html
  • app.component.ts
  • приложение /boot.ts
  • package.json
  • tconfig.json

Ran npm start и я получаю эту ошибку:


Uncaught ReferenceError: require is not defined(anonymous function) @ boot.js:1 angular2-polyfills.js:143 Uncaught TypeError: Cannot read property 'split' of undefinedreadMemberExpression @ system.src.js:1456(anonymous function) @ system.src.js:3224(anonymous function) @ system.src.js:3749complete @ system.src.js:2487run @ angular2-polyfills.js:138zoneBoundFn @ angular2-polyfills.js:111


Я нашел ссылку об использовании прокладки es6, и я включил <script src="node_modules/es6-shim/es6-shim.js"></script>.

Однако я все еще получаю ошибку Uncaught ReferenceError: require is not defined.


app.component.ts

import {Component} from 'angular2/core';

@Component({
    selector: 'my-app',
    template: '<h1>My First Angular 2 App</h1>'
})
export class AppComponent { }

(приложение/boot.ts)

import {bootstrap}    from 'angular2/platform/browser'
import {AppComponent} from './app.component'

bootstrap(AppComponent);

index.html

<html>

  <head>
    <title>Angular 2 QuickStart</title>

    <!-- 1. Load libraries -->
    <script src="node_modules/es6-shim/es6-shim.js"></script>
    <script src="node_modules/angular2/bundles/angular2-polyfills.js"></script>
    <script src="node_modules/systemjs/dist/system.src.js"></script>
    <script src="node_modules/rxjs/bundles/Rx.js"></script>
    <script src="node_modules/angular2/bundles/angular2.dev.js"></script>

    <!-- 2. Configure SystemJS -->
    <script>
      System.config({
        packages: {        
          app: {
            format: 'register',
            defaultExtension: 'js'
          }
        }
      });
      System.import('app/boot')
            .then(null, console.error.bind(console));
    </script>

  </head>

  <!-- 3. Display the application -->
  <body>
    <my-app>Loading...</my-app>
  </body>

</html>

package.json

{
  "name": "angular2-quickstart",
  "version": "1.0.0",
  "scripts": {
    "tsc": "tsc",
    "tsc:w": "tsc -w",
    "lite": "lite-server",
    "start": "concurrent \"npm run tsc:w\" \"npm run lite\" "
  },
  "license": "ISC",
  "dependencies": {
    "angular2": "2.0.0-beta.0",
    "systemjs": "0.19.6",
    "es6-promise": "^3.0.2",
    "es6-shim": "^0.33.3",
    "reflect-metadata": "0.1.2",
    "rxjs": "5.0.0-beta.0",
    "zone.js": "0.5.10"
  },
  "devDependencies": {
    "concurrently": "^1.0.0",
    "lite-server": "^1.3.1",
    "typescript": "^1.7.3"
  }
}

tconfig.json

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

Скомпилированное приложение /boot.js

введите описание изображения здесь

Последний журнал из npm start

введите описание изображения здесь

4b9b3361

Ответ 1

ОК, наконец, мое "основное" приложение работает.

Сначала моя проблема заключалась в том, что npm start не собирал файлы typescript .ts.

Из этот пост, я нашел ответ здесь Не могу найти внешний модуль 'angular2/angular2 '- Angular2 w/Typescript

Мне нужно было запустить npm install -g [email protected] для обновления моего определения typescript. Сразу после этого мне нужно было обновить TypeScript Определение (TSD) для Angular2 tsd install angular2.

После этого я все еще получал ошибки из файла boot.js.

Вместо этого import {AppComponent} from './app.component'

Мне нужно было написать его так: import {AppComponent} from '../app.component.js'


Теперь он работает! https://github.com/leongaban/angular2quickstart

введите описание изображения здесь


Одна из неприятных проблем заключается в том, что npm start по-прежнему не автокомпилирует файлы typescript, поэтому мне все равно придется вручную скомпилировать каждый файл .ts вручную tsc app.component.ts --module system

Ответ 2

Я обнаружил, что причина, по которой моя ошибка, была вызвана модулем, установленным как "commonjs" в моем файле tsconfig.json, заменив его на систему, теперь это выглядит ниже

{
  "compilerOptions": {
        "target": "es5",
        "module": "system",
        "declaration": false,
        "noImplicitAny": false,
        "removeComments": true,
        "noLib": false,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "sourceMap": true
    },
  "exclude": [
    "node_modules"
  ]
}

ИЗМЕНИТЬ Этот ответ основывался на Angular 2 beta 17. Основанный на времени этого ответа, и быстрые изменения Angular 2 претерпели, это может не работать больше.

Ответ 3

У меня такая же ошибка в версии angular2.beta15.

Я решил это, удалив

format: 'register',

из index.html

<script>
    System.config({
        packages: {
            app: {
                format: 'register',
                defaultExtension: 'js'
            }
        }
    });
</script>

Ответ 4

Я использую angular -cli, и теперь он использует webpack, но я получал эту ошибку при загрузке css. Я добавил declare let require: any; перед моим компонентом, и теперь он работает.

Ответ 5

У меня была аналогичная проблема, которая была вызвана тем, что я устанавливал неправильный формат для пакета. Формат пакета очень важен, чтобы SystemJS знал, как его обрабатывать. Документация Здесь

<script>
 System.config({
    packages: {
        appjs: {
            format: 'register',
            defaultExtension: 'js'
        },
        primeng: {
            format: 'cjs',
            defaultExtension: 'js'
        }
    },
    map: {
        'primeng': 'lib'
    }
});
 System.import('appjs/main').then(null, console.error.bind(console));
</script>

В моем случае я устанавливал формат primeng для "register" вместо "cjs".

Ответ 6

Если вы следуете инструкциям Upgrade to Angular2, это может вас укусить:

Перед конвертированием файлов в typescript убедитесь, что вы еще не загрузили загруженные файлы javascript вручную и используйте загрузчики модулей для их загрузки.

Я преобразовал некоторые файлы в TS, но все еще загружал исходные (теперь переписанные) JS файлы в index.html. Если вы это сделаете, вы будете продолжать получать "require not defined", потому что библиотека "require" еще не загружена.

Нижняя строка: Таким образом, если вы получите "require not defined", поставьте оператор отладчика перед строкой оскорбления (для меня это был import {Injectable} из "@ angular/core" ), посмотрите, какие исходные файлы были загружены, и сделайте убедитесь, что вы еще не загрузили файл вручную.

Ответ 7

Я использовал "недопустимый" импорт:

import {UrlSegment} from '@angular/router/index';

После удаления /index он снова начал компилироваться.