Интеграция темы Bootstrap в Phoenix Framework

Я создавал приложение Meteor и решил отказаться от него в пользу phoenix. Проблема, с которой я сталкиваюсь, заключается в попытке интегрировать готовую тему Bootstrap с моим приложением. Мне нужно иметь возможность контролировать порядок загрузки CSS, Sass и JavaScript. В Meteor вы помещаете порядок загрузки в файл package.json и создаете для него собственный пакет. Кроме того, вам не нужно включать операторы импорта в ваш HTML. Итак, мои конкретные вопросы таковы:

Как контролировать порядок загрузки файлов?

Куда должны деваться все файлы JavaScript, CSS, Sass и изображений? (Я предполагаю, что в статическом каталоге поставщиков?)

Мне нужно правильно включить операторы импорта в HTML-файлы?

Эта тема довольно большая с кучей файлов JavaScript, потрясающим шрифтом, Bootstrap CSS, пользовательским CSS, Sass, изображениями и кухонной раковиной.


person ceero    schedule 08.12.2015    source источник


Ответы (1)


В Фениксе это можно сделать так:

Вам нужно включить пакет sass-brunch в файл package.json и запустить npm-install, например.

{
  "repository": {
  },
  "dependencies": {
    "brunch": "^1.8.5",
    "babel-brunch": "^5.1.1",
    "clean-css-brunch": ">= 1.0 < 1.8",
    "css-brunch": ">= 1.0 < 1.8",
    "javascript-brunch": ">= 1.0 < 1.8",
    "sass-brunch": "^1.8.10",
    "uglify-js-brunch": ">= 1.0 < 1.8"
  }
}

Теперь вы измените файл app.css, расположенный в файле web/static/css/app.css, на app.scss. Отсюда импортируйте все ваши файлы css/sass (я лично добавляю bootstrap в папку поставщика в css web/static/vendor/css/bootstrap.scss), например.

@import "../vendor/css/bootstrap";

Эта следующая часть может быть той частью, которую вам было трудно понять, так как я =o). То, что вы делаете с файлами javascript, требует их в вашем файле brunch-config.js следующим образом:

exports.config = {
  // See http://brunch.io/#documentation for docs.
  files: {
    javascripts: {
      joinTo: "js/app.js",
      order: {
        before: [
          "web/static/vendor/js/jquery.min.js",
          "web/static/vendor/js/bootstrap.min.js",
          "web/static/vendor/js/scripts.js"
        ]
      }
    },
    stylesheets: {
      joinTo: "css/app.css"
    },
    templates: {
      joinTo: "js/app.js"
    }
  },

  conventions: {
    // This option sets where we should place non-css and non-js assets in.
    // By default, we set this to "/web/static/assets". Files in this directory
    // will be copied to `paths.public`, which is "priv/static" by default.
    assets: /^(web\/static\/assets)/
  },

  // Phoenix paths configuration
  paths: {
    // Dependencies and current project directories to watch
    watched: [
      "deps/phoenix/web/static",
      "deps/phoenix_html/web/static",
      "web/static",
      "test/static"
    ],

    // Where to compile files to
    public: "priv/static"
  },

  // Configure your plugins
  plugins: {
    babel: {
      // Do not use ES6 compiler in vendor code
      ignore: [/web\/static\/vendor/]
    }
  },

  modules: {
    autoRequire: {
      "js/app.js": ["web/static/js/app"]
    }
  },

  npm: {
    enabled: true
  }
};
person Donovan Dikaio    schedule 08.12.2015
comment
Вы включаете операторы импорта и скрипт src в файлы html.eex, верно? Чтобы убедиться, что у меня есть это право, мне нужно изменить app.css на app.scss, добавить поддержку scss в мою конфигурацию бранча, импортировать все мои файлы css и scss в app.scss и поместить все файлы css и js в папку. папка продавца. Это звучит правильно? - person ceero; 08.12.2015
comment
Правильно, ceero, делая это таким образом, вы сможете импортировать их в том порядке, в котором тема должна импортировать файлы. Что касается файла html.eex, вам не нужно будет импортировать или ссылаться на файлы по отдельности, потому что phoenix, работающий вместе с бранчем, скомпилирует и сожмет все файлы в один файл css и один файл js для вас, используя сборку бранча и когда вы' готовясь к запуску в производство, вам нужно запустить mix phoenix.digest, который будет обрабатывать ваши активы для вас. - person Donovan Dikaio; 08.12.2015
comment
Эти файлы уже связаны с вашим основным файлом макета app.html.eex, который находится в папке web/templates/layout. - person Donovan Dikaio; 08.12.2015
comment
Понятно. Это было то объяснение, которое я искал. Позволяет ли Phoenix использовать несколько макетов в зависимости от маршрута? - person ceero; 08.12.2015
comment
Это действительно так, вы можете увидеть, как это реализовано здесь 33400578" title="правильный способ использования разных макетов для шаблонов в phoenix">stackoverflow.com/questions/33399767/ и здесь hexdocs.pm/phoenix/1.0.0/Phoenix.Controller.html#layout/1 - person Donovan Dikaio; 08.12.2015