Empfohlene Möglichkeit, die Bootstrap-Bibliothek in die Ember.JS-Ember-Cli-App aufzunehmen


80

Ich versuche, Twitter Bootstrap in meinem aktuellen ember-cli-Projekt ordnungsgemäß zu installieren. Ich habe Bootstrap mit Bower installiert:

bower install --save bootstrap

Jetzt ist die Bibliothek in / vendor / bootstrap / dist / (css | js | fonts) heruntergefahren. Ich habe versucht, was hier erwähnt wird: http://ember-cli.com/#managing-dependencies ersetzt Pfad- und CSS-Dateinamen, aber ich bekomme Fehler in Bezug auf die Datei Brocfile.js . Ich denke, das Brocfile-Format hat sich im Vergleich zum Beispiel zu sehr geändert.

Ich habe auch versucht, mit der Datei /app/styles/app.css @ zu importieren , nachdem ich die Stylesheets in das Verzeichnis / app / styles / verschoben habe :

@import url('/assets/bootstrap.css');
@import url('/assets/bootstrap-theme.css');

Aber es hat nicht funktioniert. Die Dateien sind sichtbar wahrer Dev Server:http://localhost:4200/assets/bootstrap.css

Kann mir hier jemand einen Knochen werfen?

Danke

Bearbeiten:

ember -v
ember-cli 0.0.23

brocfile.js

    /* global require, module */

var uglifyJavaScript = require('broccoli-uglify-js');
var replace = require('broccoli-replace');
var compileES6 = require('broccoli-es6-concatenator');
var validateES6 = require('broccoli-es6-import-validate');
var pickFiles = require('broccoli-static-compiler');
var mergeTrees = require('broccoli-merge-trees');

var env = require('broccoli-env').getEnv();
var getEnvJSON = require('./config/environment');

var p = require('ember-cli/lib/preprocessors');
var preprocessCss = p.preprocessCss;
var preprocessTemplates = p.preprocessTemplates;
var preprocessJs = p.preprocessJs;

module.exports = function (broccoli) {

  var prefix = 'caisse';
  var rootURL = '/';

  // index.html

  var indexHTML = pickFiles('app', {
    srcDir: '/',
    files: ['index.html'],
    destDir: '/'
  });

  indexHTML = replace(indexHTML, {
    files: ['index.html'],
    patterns: [{ match: /\{\{ENV\}\}/g, replacement: getEnvJSON.bind(null, env)}]
  });

  // sourceTrees, appAndDependencies for CSS and JavaScript

  var app = pickFiles('app', {
    srcDir: '/',
    destDir: prefix
  });

  app = preprocessTemplates(app);

  var config = pickFiles('config', { // Don't pick anything, just watch config folder
    srcDir: '/',
    files: [],
    destDir: '/'
  });

  var sourceTrees = [app, config, 'vendor'].concat(broccoli.bowerTrees());
  var appAndDependencies = mergeTrees(sourceTrees, { overwrite: true });

  // JavaScript

  var legacyFilesToAppend = [
    'jquery.js',
    'handlebars.js',
    'ember.js',
    'ic-ajax/dist/named-amd/main.js',
    'ember-data.js',
    'ember-resolver.js',
    'ember-shim.js',
    'bootstrap/dist/js/bootstrap.js'
  ];

  var applicationJs = preprocessJs(appAndDependencies, '/', prefix);

  applicationJs = compileES6(applicationJs, {
    loaderFile: 'loader/loader.js',
    ignoredModules: [
      'ember/resolver',
      'ic-ajax'
    ],
    inputFiles: [
      prefix + '/**/*.js'
    ],
    legacyFilesToAppend: legacyFilesToAppend,
    wrapInEval: env !== 'production',
    outputFile: '/assets/app.js'
  });

  if (env === 'production') {
    applicationJs = uglifyJavaScript(applicationJs, {
      mangle: false,
      compress: false
    });
  }

  // Styles

  var styles = preprocessCss(appAndDependencies, prefix + '/styles', '/assets');

  // Bootstrap Style integration
  var bootstrap = pickFiles('vendor', {
    srcDir: '/bootstrap/dist/css',
    files: [
      'bootstrap.css',
      'bootstrap-theme.css'
    ],
    destDir: '/assets/'
  });

//var bootstrap = preprocessCss(appAndDependencies, '/vendor/bootstrap/dist/css', '/assets');

  // Ouput

  var outputTrees = [
    indexHTML,
    applicationJs,
    'public',
    styles,
    bootstrap
  ];

  // Testing

  if (env !== 'production') {

    var tests = pickFiles('tests', {
      srcDir: '/',
      destDir: prefix + '/tests'
    });

    var testsIndexHTML = pickFiles('tests', {
      srcDir: '/',
      files: ['index.html'],
      destDir: '/tests'
    });

    var qunitStyles = pickFiles('vendor', {
      srcDir: '/qunit/qunit',
      files: ['qunit.css'],
      destDir: '/assets/'
    });

    testsIndexHTML = replace(testsIndexHTML, {
      files: ['tests/index.html'],
      patterns: [{ match: /\{\{ENV\}\}/g, replacement: getEnvJSON.bind(null, env)}]
    });

    tests = preprocessTemplates(tests);

    sourceTrees = [tests, 'vendor'].concat(broccoli.bowerTrees());
    appAndDependencies = mergeTrees(sourceTrees, { overwrite: true });

    var testsJs = preprocessJs(appAndDependencies, '/', prefix);

    var validatedJs = validateES6(mergeTrees([app, tests]), {
      whitelist: {
        'ember/resolver': ['default'],
        'ember-qunit': [
          'globalize',
          'moduleFor',
          'moduleForComponent',
          'moduleForModel',
          'test',
          'setResolver'
        ]
      }
    });

    var legacyTestFiles = [
      'qunit/qunit/qunit.js',
      'qunit-shim.js',
      'ember-qunit/dist/named-amd/main.js'
    ];

    legacyFilesToAppend = legacyFilesToAppend.concat(legacyTestFiles);

    testsJs = compileES6(testsJs, {
      // Temporary workaround for
      // https://github.com/joliss/broccoli-es6-concatenator/issues/9
      loaderFile: '_loader.js',
      ignoredModules: [
        'ember/resolver',
        'ember-qunit'
      ],
      inputFiles: [
        prefix + '/**/*.js'
      ],
      legacyFilesToAppend: legacyFilesToAppend,

      wrapInEval: true,
      outputFile: '/assets/tests.js'
    });

    var testsTrees = [qunitStyles, testsIndexHTML, validatedJs, testsJs];
    outputTrees = outputTrees.concat(testsTrees);
  }

  return mergeTrees(outputTrees, { overwrite: true });
};

Können Sie Ihre ember-cli-Version und den Inhalt von Brocfile.js anzeigen?
Marcio Junior

Auch über die index.html nach dem Kopieren in / styles funktioniert. <link rel = "stylesheet" href = "Assets / bootstrap.css"> <link rel = "Stylesheet" href = "Assets / bootstrap-theme.css">
Guidouil

Antworten:


39

Möglicherweise möchten Sie ember-bootstrap auschecken , wodurch die Bootstrap-Assets automatisch importiert werden.

ember install ember-bootstrap

Darüber hinaus wird Ihrer App eine Reihe nativer Glutkomponenten hinzugefügt, die das Arbeiten mit Bootstrap-Funktionen in Glut erheblich vereinfachen. Probieren Sie es aus, obwohl ich ein bisschen voreingenommen bin, da ich der Autor davon bin! ;)


1
Dieser Befehl reicht aus, um ein vorhandenes Glutprojekt in Bootstrap umzuwandeln. Danke Simon.
Raja Nagendra Kumar

Ember-Bootstrap ist ausgezeichnet! Eine fehlende Komponente ist jedoch das Karussell. Wenn das Karussell funktionieren soll, müssen Sie die Bootstrap-Komponenten über die Anweisungen von @rastapasta installieren. Es scheint, dass ember-bootstrap die transitions.js nicht als Teil der eingebrachten Bootstrap-Assets enthält ERFORDERLICH für das Karussell.
RyanNerd

@ RyanNerd Danke! Ja, Karussell fehlt noch. Sollte aber hoffentlich bald nach der kommenden Version 1.0 hinzugefügt werden!
Simon Ihmig

68

BASH:

bower install --save bootstrap

Brocfile.js:

app.import('vendor/bootstrap/dist/js/bootstrap.js');
app.import('vendor/bootstrap/dist/css/bootstrap.css');

Das JS wird der App.js hinzugefügt, die standardmäßig verknüpft ist, und das CSS wird hinzugefügt assets/vendor.css, das ab dem 14. Mai ebenfalls standardmäßig hinzugefügt wird.

Als Referenz: http://www.ember-cli.com/#managing-dependencies

Als Antwort auf die Frage von @ Joe zu Schriftarten und anderen Assets konnte ich die empfohlene Methode app.import () nicht für die Bearbeitung der Schriftarten verwenden. Ich habe mich stattdessen für den Merge-Tree- und Static-Compiler-Ansatz entschieden:

var mergeTrees = require('broccoli-merge-trees');
var pickFiles = require('broccoli-static-compiler');
var extraAssets = pickFiles('vendor/bootstrap/dist/fonts',{
    srcDir: '/', 
    files: ['**/*'],
    destDir: '/fonts'
});

module.exports = mergeTrees([app.toTree(), extraAssets]);

9
Und starten Sie den Server neu, da Änderungen an der Brocfile nicht automatisch von Livereload übernommen werden ... Ich denke :)
max

7
Wenn Sie ember-cli v0.0.35 oder höher verwenden, müssen Sie möglicherweise einige Broccoli-Plugins in Ihre package.json aufnehmen. Sie können sie hinzufügen über: npm install --save-dev broccoli-merge-treesund npm install --save-dev broccoli-static-compiler.
Sean O'Hara

5
Beachten Sie, dass jetzt "Hersteller" für alles, was mit Laube installiert ist, durch "bower_components" ersetzt wurde. Der Ordner "Hersteller" kann weiterhin für benutzerdefinierte Bibliotheken verwendet werden.
SeanK

6
Sie können Schriftarten auch importieren mit app.import('vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.woff', { destDir: 'fonts' });Überprüfen Sie den folgenden Link miguelcamba.com/blog/2014/08/10/…
Jose S

3
Es scheint, dass mein generiertes Projekt auch boostrap.css.map angefordert hat, also habe ich auch die folgende Codezeile hinzugefügt. app.import('bower_components/bootstrap/dist/css/bootstrap.css.map', { destDir: 'assets' });
ConsideRatio

45

BASH:

bower install --save bootstrap

Brocfile.js:

/* global require, module */

...


app.import('bower_components/bootstrap/dist/css/bootstrap.css');
app.import('bower_components/bootstrap/dist/css/bootstrap.css.map', {
    destDir: 'assets'
});
app.import('bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot', {
    destDir: 'fonts'
});
app.import('bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf', {
    destDir: 'fonts'
});
app.import('bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg', {
    destDir: 'fonts'
});
app.import('bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff', {
    destDir: 'fonts'
});
app.import('bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2', {
    destDir: 'fonts'
});

app.import('bower_components/bootstrap/dist/js/bootstrap.js');

module.exports = app.toTree();

Dies ist eine gute Methode für Ember 1.9, bis Ember-Cli-Bootstrap gestoßen wird, um für Lenker> = 2.0
Genkilabs

2
Die Befehle, die Sean O'Hara in einem Kommentar zu Drews Antwort angegeben hat, sollten hinzugefügt werden:npm install --save-dev broccoli-merge-trees && npm install --save-dev broccoli-static-compiler
Timo

@ TimoLehto Welchen Vorteil bietet Cli gegenüber diesem Broc-Import?
SuperUberDuper

@ SuperUberDuper, sry Kumpel. Ich verstehe die Frage nicht. Was für ein Cli? Worüber redest du?
Timo

@genkilabs sehen nicht den Punkt des Cli-Bootstraps, es ist einfach wie oben gezeigt
SuperUberDuper

23

Update 30.03.15

plus ça change ... Ich verwende jetzt ember-cli-bootstrap-sassy . Es scheint ein Minimum an Cruft mit sich zu bringen, während ich trotzdem die Variablen von Bootstrap anpassen kann.


Update 22.01.15

Sie sollten wahrscheinlich Johnnys obige Lösung anstelle der ursprünglich erwähnten Bibliothek verwenden. Ich mag auch ember-cli-bootstrap-sass , weil ich die Variablen von Bootstrap direkt in meinem Projekt anpassen kann.

Original 7/11/14

Wenn Sie eine Version von ember-cli verwenden, die Addons unterstützt (0,35+, glaube ich), können Sie jetzt das ember-cli-bootstrap- Paket verwenden. Aus dem Stammverzeichnis Ihrer App,

npm install --save-dev ember-cli-bootstrap

Das ist es!

Hinweis: Wie @poweratom hervorhebt, ember-cli-bootstraphandelt es sich um die Bibliothek eines anderen, die auch Bootstrap-for-Ember enthält . Daher könnte diese Bibliothek nicht mehr mit der offiziellen Bootstrap-Version synchronisiert sein. Ich finde es jedoch immer noch eine großartige Möglichkeit, schnell Prototypen für ein neues Projekt zu erstellen!


2
Ändern Sie aktuell auf Ihre aktuelle Version. Aktuell heute (0.0.39) ist vielleicht nicht einmal die Version, die Sie verwenden ...
Jacob van Lingen

Im Moment enthält ember-cli-bootstrap keine bootstrap.js, daher möchten Sie integrierte Javascript-Methoden oder die verschiedenen Plugins verwenden können.
zeichnete covi

2
Ich bin mir nicht sicher, ob dies eine "empfohlene" Möglichkeit sein sollte, es per se zu installieren. Das Projekt 'ember-cli-bootstrap' basiert auf dem Projekt 'bootstrap-for-ember'. Leider gab er laut dem Betreuer des letzteren Projekts bekannt, dass er jetzt stattdessen an dem Projekt "Glutkomponenten" als dessen Nachfolger arbeitet. Wenn also nicht versucht wird, dort weiterzumachen, wo er aufgehört hat (dieses Projekt verwendet derzeit Bootstrap 3.0.0, glaube ich), wird die Bootstrap-Version früh genug veraltet sein (ist es bereits).
Poweratom

15
$> bower install --save bootstrap

Fügen Sie anschließend Ihren ember-cli-builds.js (oder Brocfile.js, wenn Sie eine ältere Version von Ember.js verwenden) die folgenden zwei Zeilen hinzu :

app.import(app.bowerDirectory + '/bootstrap/dist/js/bootstrap.js');
app.import(app.bowerDirectory + '/bootstrap/dist/css/bootstrap.css');

Und voilà, bereit zu gehen!

aktualisiert am 18.08.2015: angepasst an das in Ember.js 1.13 eingeführte neue Schema


1
Die neueste Version von ember-cli enthält keine brocfile.js mehr
Mad Scientist

5
@MadScientist, Sie können die 'ember-cli-build.js' zum Importieren verwenden. Die obigen Schritte funktionieren noch. (Glut: 1.12.6)
Alan Francis

Wie kombinieren Sie diesen Ansatz mit Bootstrap-Overrides wie bootswatch.com/flatly
Benjamin Udink ten Cate

5

Auf diese Weise verpacke ich CSS-Dateien von Anbietern mit Broccoli (das Ember-cli untermauert).

 var vendorCss = concat('vendor', {
   inputFiles: [
     'pikaday/css/pikaday.css'
   , 'nvd3/nv.d3.css'
   , 'semantic-ui/build/packaged/css/semantic.css'
   ]
  , outputFile: '/assets/css/vendor.css'
  });

Wo der vendorOrdner ist, wo meine Bower-Pakete leben. Und assetshier erwarte ich, dass mein CSS lebt. Ich gehe davon aus, dass Sie Bootstrap mit Bower installiert haben, was der Ember-Cli-Weg ist.

Dann verweise ich in meiner index.html einfach auf diese vendor.cssDatei:

  <link href="/assets/css/vendor.css" rel="stylesheet" type="text/css" media="all">

Prost.


Ich habe es versucht, aber es sagt mir, dass concat in Broccoli undefiniert ist (ReferenceError: concat ist nicht definiert). Ich habe hinzugefügt, dass ich nur den Pfad zu den in der Datei enthaltenen Stylesheets geändert habe: Brocfile.js im Stammverzeichnis des App-Ordners.
Guidouil

1
Installieren Sie das Plugin npm install broccoli-concat --saveDann in Ihrem Brocfile, oben:var concat = require('broccoli-concat');
Johnny Hall

5

Wenn Sie SASS verwenden (wahrscheinlich über ember-cli-sass), bower_componentswird es automatisch zum Suchpfad hinzugefügt. Dies bedeutet, dass Sie nur Bower verwenden und die Brocfile / ember-cli-build-Datei insgesamt vermeiden können.

Installieren Sie die offizielle SASS-Version von Bootstrap mit Bower

bower install --save bootstrap-sass

Importieren Sie dann die Bibliothek in app.scss. Das Schöne daran ist, dass Sie die Variablen vor dem Importieren von Bootstrap anpassen können:

$brand-primary: 'purple';

@import 'bower_components/bootstrap-sass/assets/stylesheets/bootstrap';

oder $ ember installiere ember-cli-sass $ ember installiere ember-cli-bootstrap-sassy, ​​benenne dann app.css in app.scss um und füge diese Zeile hinzu: @import "bootstrap"
rmcsharry

3
bower install --save bootstrap

in Ihrem brocfile.js:

app.import('bower_components/bootstrap/dist/js/bootstrap.js');
app.import('bower_components/bootstrap/dist/css/bootstrap.css');

Ich weiß nicht, warum dies tatsächlich notiert wurde. Es ist möglicherweise nicht sehr klar, es sei denn, Sie wissen, wo diese Aussagen zu platzieren sind. Aber es funktioniert gut ... vielleicht nicht so schön wie das Add-On, das ich zugebe. Sie gehen in die ember-cli-build.jsDatei und funktionieren einwandfrei, wenn jemand dies benötigt. Ich füttere meine Glut von innen als Asp.Net MVC-Projekt und brauchte sie für dieses Projekt, nicht nur für die Glut-App.
hal9000

0

Auf dem Terminal (Für Benutzer von Node Package Manager)

npm install bootstrap --save

Verwenden Sie ember-cli, um Ihren installierten Bootstrap zu importieren

Öffnen Sie die ember-cli-build.jsDatei

module.exports = function(defaults) {
  let app = new EmberApp(defaults, {
    // Add options here
  });
app.import('node_modules/bootstrap/dist/css/bootstrap.min.css');
app.import('node_modules/bootstrap/dist/js/bootstrap.min.js');

Dies ist der Fall, wenn Bootstrap über das NPM-Installationsprogramm installiert wird.

Mach das nicht:

app.import('./node_modules/bootstrap/dist/css/bootstrap.min.css');
app.import('./node_modules/bootstrap/dist/js/bootstrap.min.js');
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.