jspm не может найти globalResources «функционального» плагина для приложения Aurelia

Документы Aurelia описывают, как настроить и использовать подключаемый модуль функций, по адресу http://aurelia.io/docs.html#features<. /а>

У меня возникли проблемы, потому что кажется, что jspm или Aurelia преобразуют пути к ресурсам. Я обнаружил, что если я укажу текущий путь с .aurelia.use.feature('./plugins/auth');, то calvert-auth/index.js не может быть найден при загрузке. Запрос выглядит корректно, но браузер выдает ошибку 404. Я исправил это, просто удалив "./" из .aurelia.use.feature('plugins/auth');

Затем я добавил вызов в configure() index.s для frameworkConfig.globalResources('auth'). Это вызывает новую ошибку 404, поскольку запрос относится к calvert-auth/auth.html вместо ожидаемого calvert-auth/auth.js.

Я подозреваю, что проблема может быть в конфигурации jspm или, может быть, в corejs, но пока не удалось ее изолировать.

Как создать и использовать внутренние подключаемые модули для Aurelia? Вот классы:

config.js

...
paths: {
  "*": "dist/*",
  "github:*": "jspm_packages/github/*",
  "npm:*": "jspm_packages/npm/*"
},
...

main.js

import 'bootstrap';
import authConfig from './auth-config';

export function configure(aurelia) {
  aurelia.use
    .standardConfiguration()
    .developmentLogging()
    .feature('plugins/calvert-auth', (baseConfig) => {
      baseConfig.configure(authConfig);
    });

  aurelia.start().then(a => a.setRoot());
}

плагины/calvert-аутентификация/auth.js

export class Auth {
  constructor() {
    console.log('Auth: constructor()');
  }
}

плагины/calvert-аутентификация/index.js

import {BaseConfig} from './baseConfig';

export function configure(frameworkConfig, configCallback) {
  frameworkConfig.globalResources('./auth');

  let baseConfig = frameworkConfig.container.get(BaseConfig);
  if (configCallback !== undefined && typeof(configCallback) === 'function') {
    configCallback(baseConfig);
  }
}

person Community    schedule 03.11.2015    source источник


Ответы (1)


Попробуй это:

Предполагая ваш код выше и эту структуру:

main.js
plugins/calvert-auth/index.js
plugins/calvert-auth/auth.js

В main.js:

import 'bootstrap';
import authConfig from './auth-config';

export function configure(aurelia) {
  aurelia.use
    .standardConfiguration()
    .developmentLogging()
    .feature('plugins/calvert-auth', (baseConfig) => {
      baseConfig.configure(authConfig);
    });

  aurelia.start().then(a => a.setRoot());
}

В плагинах/calvert-auth/index.js:

export function configure(frameworkConfig, configCallback) {
  // this assumes you're importing a view model
  frameworkConfig.globalResources('auth');
}

В плагинах/calvert-auth/auth.js:

import {noView} from 'aurelia-framework';
@noView
export class Auth {
  constructor() {
    console.log('Auth: constructor()');
  }
}
person shanonvl    schedule 03.11.2015
comment
Привет @shanonvl, я добавил больше деталей, чтобы включить мой main.js. Да, структура каталогов та же. Единственная разница, которую я заметил, заключалась в том, что у меня были globalResources('./auth'), а у вас — globalResources('auth'). Я попробовал это, и результат тот же. Ошибка запроса: необработанный отказ от обещания. Ошибка: ошибка XHR (404 Not Found) при загрузке локальный хост: 9000/dist/plugins/calvert-auth/auth.html - person ; 03.11.2015
comment
Можете ли вы опубликовать часть paths вашего config.js? Также - и не уверен, что это будет иметь значение - main.js должен быть: .... .developmentLogging() .feature('plugins/calvert-auth', (baseConfig) => { .... ( don не переделывать aurelia.use ) - person shanonvl; 03.11.2015
comment
Добавлен фрагмент из config.js и исправлена ​​цепочка aurelia.use. Проблема не устранена. - person ; 03.11.2015
comment
Обновил мой код выше. По-видимому, globalResources предполагает, что вы импортируете модель представления, поэтому запрос auth.html. Вы можете использовать декоратор @noView, чтобы указать, что представления нет. - person shanonvl; 04.11.2015