2016-05-13 1 views
0

Я хотел переименовать модуль @angular в angular2, так как считаю его более читаемым и хотел понять, как работают импорт.Rename Angular2 import module

Поэтому, прежде чем моя попытка изменить это, systemjs.config.js выглядел следующим образом:

(function(global) 
{ 
    var map = 
    { 
     'app': 'app', // 'dist', 
     '@angular': 'node_modules/@angular', 
     /*...*/ 
    }; 

    var packages = 
    { 
     'app': { main: 'main.js', defaultExtension: 'js' }, 
     '@angular/common': { main: 'index.js', defaultExtension: 'js' }; 
     /*...*/ 
    }; 

    var config = 
    { 
     map: map, 
     packages: packages 
    }; 

    if (global.filterSystemConfig) 
    { 
     global.filterSystemConfig(config); 
    } 

    System.config(config); 
})(this); 

И импорт в приложение-Машинопись-файлов выглядит следующим образом:

import { Component } from '@angular/core'; 

Это работает, как ожидалось. Теперь я изменил systemjs.config.js к этому:

(function(global) 
{ 
    var map = 
    { 
     'app': 'app', // 'dist', 
     'angular2': 'node_modules/@angular', 
     /*...*/ 
    }; 

    var packages = 
    { 
     'app': { main: 'main.js', defaultExtension: 'js' }, 
     'angular2/common', { main: 'index.js', defaultExtension: 'js' }; 
     /*...*/ 
    }; 

    var config = 
    { 
     map: map, 
     packages: packages 
    }; 

    if (global.filterSystemConfig) 
    { 
     global.filterSystemConfig(config); 
    } 

    System.config(config); 
})(this); 

Так что я мог бы импортировать Angular2 модули, как это:

import { Component } from 'angular2/core'; 

Когда я пытаюсь запустить npm start, я получаю следующее errow Сейчас:

file-where-i-import.component.ts (1,32): ошибка TS2307: Не удается найти модуль 'angleular2/core'.

Почему это не работает? Что мне не хватает?

ответ

2

Проблема в том, что конфигурация SystemJS предназначена только для времени выполнения.

Компиляция типаScript основана на файлах d.ts для модулей, типов и .... Компилятор будет искать в папке под номером node_modules, чтобы это разрешило модули, поэтому имена модулей для Angular2 должны начинаться с префикса @angular/.

+0

Так что это не возможно мне заставить его работать? – CharlyDelta

+0

Я думаю, что он может работать во время выполнения, но у вас будут ошибки в компиляции ... Тем не менее, это не только переименование модуля, потому что некоторые новые общедоступные модули теперь присутствуют в версиях rc, тогда как у вас есть только 'angular2/core',' angular2/common' в бета-версиях. –

+1

Хорошо, спасибо за вашу помощь. Думаю, я просто оставлю это как есть. – CharlyDelta

1

Если у вас так много проблем с @angular не использовать его .. Шучу .. вы можете попробовать ниже,

создать новый файл с именем angular2 с ниже,

export * from "@angular/core"; 

и когда вы ссылаетесь вы можете использовать

import { Component } from 'path to angular2 module'; 

Теперь это не совсем то, что вы можете, потому что вы должны использовать ссылочный путь, а не имя модуля. Также вы должны включить все модули из угловых, которые вы, возможно, захотите использовать. Вы также можете фильтровать и раскрывать только то, что вы можете захотеть, используя имена экспорта, такие как Component и т. Д., Также у вас есть возможность добавить свои модули вместе с угловыми.

Если вы хотите узнать больше о том, как разрешение Модуль работает в машинописном вы можете посмотреть на Typescript Module Resolution

Update: может иметь структуру папок, как показано ниже (выдержки из Typescript Module Resolution),

/root/src/angular2/package.json (if it specifies a "typings" property) 
    /root/src/angular2/index.ts 
    /root/src/angular2/index.d.ts 

, то вы можете использовать

import { Component } from 'angular2'; 

Надеюсь, это поможет!

+0

Интересная попытка, но я думаю, что импорт всего может замедлить работу приложения, чтобы не принести большой пользы. Спасибо за вашу помощь, всегда хорошо знать некоторые альтернативы. И у меня на самом деле нет проблем с этим, я просто менял некоторые вещи в systemjs.config и думал, что, возможно, это может сработать, чтобы просто переименовать что-то. Из интереса я попытался и не смог, и задавался вопросом, почему: D – CharlyDelta

+1

Не уверен, что он будет замедляться, но читайте об этом на Angular Docs [Barrel] (https://angular.io/docs/ts/latest/glossary. html #! # B) .. Баррель - это способ свернуть экспорт из нескольких модулей в единый модуль удобства. Сам ствол является файлом модуля, который реэкспортирует выбранный экспорт других модулей. Ура! –

+0

Я посмотрю :) спасибо за головы :) – CharlyDelta

1

Вы можете указать path mapping для этого в tsconfig.json:

"compilerOptions": { 
    // ...omitted other options... 
    "baseUrl": "", 
    "paths": { 
     "angular2/*": [ 
      "node_modules/@angular/*" 
     ] 
    } 
} 

Эта функция приходит в машинописном 2.0, но вы можете использовать его сегодня: npm install [email protected]

+0

Мне было просто интересно, есть ли встроенный способ, и если я просто что-то упустил. Но спасибо вам за вашу помощь :) – CharlyDelta

+0

@ChristianDreher есть. Это встроенный способ сделать это. –

+0

Извините, я имел в виду встроенный способ с текущей версией, которую я использую – CharlyDelta