Импорт CSS и контроль порядка в <head> с использованием jspm и system.js

Я написал следующее в приложении Aurelia

import "bootstrap/css/bootstrap.css!";
import "./app.css!";

и я хочу, чтобы app.css занял второе место, поскольку он переопределяет стили bootstrap.css. Однако сначала я получаю app.css, так как я предполагаю, что загрузчик system.js запускает их параллельно, и поскольку app.css является меньшим из двух, он загружается первым.

Есть ли способ в jspm, чтобы определить зависимость между этими двумя файлами, чтобы контролировать их порядок загрузки, есть ли другой способ?

Спасибо заранее!:)

4 ответа

Вы можете попробовать импортировать CSS, используя System.import. Например, в вашем index.html:

System.import('bootstrap/css/bootstrap.css!').then(() => {
    System.import('./app.css!');
});

Но имейте в виду, что таким образом вы должны убедиться, что system.js поставляется с вашим приложением. Таким образом, вы не можете связать все свое приложение как самореализующийся пакет.

У нас есть кое-что, что должно помочь вам с этой проблемой. Если вы проверите это:

<template>
  <require from="nav-bar.html"></require>
  <require from="bootstrap/css/bootstrap.css"></require>

  <nav-bar router.bind="router"></nav-bar>

  <div class="page-host">
    <router-view></router-view>
  </div>
</template>

Я знаю, что Aurelia будет передавать CSS-файлы загрузчику по порядку, но я не уверен, сможем ли мы гарантировать порядок загрузки. Надеюсь, Роб сможет приехать сюда и дать правильный ответ на это, хотя. Я укажу ему в этом направлении.

У меня была точно такая же проблема. Управление порядком CSS невозможно в JSPM. Я решил эту проблему с SASS и некоторыми хитростями. Вот что я сделал:

В html вы даете основному элементу некоторый идентификатор:

<html id="some-id">

Затем вы создаете файл sass, который будет содержать ваши переопределения (_overrides.scss):

#some-id {
  @import "buttons";
}

Теперь ваш button.scss может переопределить стили из начальной загрузки (_buttons.scss):

.btn-default {
  background-color: #B6B3C7;
  border-color: #B33A3A;
}

Это работает благодаря принципу CSS - выигрывает самый специфический селектор. Обернув все ваши настройки в #some-id в scss, вы получите код с каждым битом кода, который импортируется в фигурные скобки с префиксом #some-id. Таким образом, ваш селектор всегда будет более конкретным, чем начальный загрузчик, и переопределит его.

Я не знаю, будет ли этого достаточно для вас, поскольку вы не упоминаете scss, но это было для меня.

Я сталкивался с подобной проблемой во время разработки. Код ниже помог мне решить мою проблему. Теперь все загружается именно так, как я хочу.

System.import('bootstrap/css/bootstrap.css!').then(() => {
  System.import('./app.css!');
});

Спасибо LazerBass за это предложение.

Другие вопросы по тегам