Ember.JS ember-cli 앱에 부트 스트랩 라이브러리를 포함하는 권장 방법


80

현재 ember-cli 프로젝트에서 Twitter Bootstrap을 제대로 설치하려고합니다. 나는 bower로 부트 스트랩을 설치했습니다.

bower install --save bootstrap

이제 라이브러리는 / vendor / bootstrap / dist / (css | js | fonts)에 다운로드 됩니다. 여기에 언급 된 내용을 시도해 보았습니다. http://ember-cli.com/#managing-dependencies 경로 및 CSS 파일 이름을 대체했지만 Brocfile.js 파일 에 관한 오류 . brocfile 형식이 예제에 비해 너무 많이 변경되었다고 생각합니다.

또한 / app / styles / 디렉토리에서 스타일 시트를 이동 한 후 /app/styles/app.css 파일 로 @import를 시도했습니다 .

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

그러나 그것은 작동하지 않았습니다. 파일은 실제 개발 서버에서 볼 수 있습니다.http://localhost:4200/assets/bootstrap.css

누군가 여기에 뼈를 던질 수 있습니까?

고마워

편집하다 :

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 });
};

ember-cli 버전과 Brocfile.js 콘텐츠를 보여줄 수 있습니까?
Marcio Junior

또한 / styles에서 복사 한 후 index.html을 통해 포함되었습니다. <link rel = "stylesheet"href = "assets / bootstrap.css"> <link rel = "stylesheet"href = "assets / bootstrap-theme.css">
Guidouil

답변:


39

부트 스트랩 자산을 자동으로 가져 오는 ember-bootstrap 을 확인하는 것이 좋습니다.

ember install ember-bootstrap

또한 앱에 기본 ember 구성 요소 모음을 추가하여 ember에서 부트 스트랩 기능을 훨씬 쉽게 사용할 수 있습니다. 내가 그것의 저자이기 때문에 약간 편견이 있지만 그것을 확인하십시오! ;)


1
이 명령은 기존의 불씨 프로젝트를 부트 스트랩으로 변환하기에 충분합니다. 사이먼 감사합니다.
Raja Nagendra Kumar

ember-bootstrap은 훌륭합니다! 그러나 여기에서 누락 된 구성 요소는 캐 러셀입니다. 캐 러셀이 작동하려면 @rastapasta 지침을 통해 부트 스트랩 구성 요소를 설치해야합니다. 캐 러셀에 필요합니다.
RyanNerd

@RyanNerd 감사합니다! 예, 아직 캐 러셀이 없습니다. 하지만 다가오는 1.0 릴리스 이후 곧 추가 될 예정입니다!
사이먼 Ihmig

68

세게 때리다:

bower install --save bootstrap

Brocfile.js :

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

기본적으로 링크 된 app.js에 JS가 추가되고 assets/vendor.css5 월 14 일부터 기본적으로 추가되는에 CSS가 추가됩니다.

참고 : http://www.ember-cli.com/#managing-dependencies

글꼴 및 기타 자산에 대한 @Joe의 질문에 대한 응답으로 글꼴 작업에 권장되는 app.import () 메서드를 가져올 수 없었습니다. 대신 병합 트리 및 정적 컴파일러 접근 방식을 선택했습니다.

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
그리고 brocfile에 대한 변경 사항이 Livereload에 의해 자동으로 선택되지 않기 때문에 서버를 다시 시작하십시오 ... 제 생각에는 :)
max

7
ember-cli v0.0.35 이상을 사용하는 경우 package.json에 두 개의 Broccoli 플러그인을 포함해야 할 수 있습니다. 다음을 통해 추가 할 수 있습니다. npm install --save-dev broccoli-merge-treesnpm install --save-dev broccoli-static-compiler.
Sean O'Hara

5
이제 'vendor'가 bower와 함께 설치된 모든 항목에 대해 'bower_components'로 대체되었습니다. '공급 업체'폴더는 사용자 지정 라이브러리에 계속 사용할 수 있습니다.
SeanK 2014

6
app.import('vendor/bootstrap/dist/fonts/glyphicons-halflings-regular.woff', { destDir: 'fonts' });다음 링크 를 확인하여 글꼴을 가져올 수도 있습니다. miguelcamba.com/blog/2014/08/10/…
Jose S

3
내 생성 된 프로젝트가 boostrap.css.map도 요청한 것 같아서 아래 코드 줄도 추가했습니다. app.import('bower_components/bootstrap/dist/css/bootstrap.css.map', { destDir: 'assets' });
consideRatio

45

세게 때리다:

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();

이 핸들> = 2.0 빌드로 충돌한다 엠버 - CLI-부트 스트랩까지 엠버 1.9을위한 좋은 방법입니다
genkilabs

2
Sean O'Hara가 Drew의 답변에 대한 주석에서 언급 한 명령을 여기에 추가해야합니다.npm install --save-dev broccoli-merge-trees && npm install --save-dev broccoli-static-compiler
Timo

@TimoLehto이 broc 가져 오기보다 CLI가 어떤 이점을 제공합니까?
SuperUberDuper

@SuperUberDuper, sry mate. 질문을 이해하지 못 하겠어. 무슨 CLI? 무슨 소리 야?
Timo 2015 년

위의 그림과 같이 @genkilabs는 쉬운을 CLI - 부트 스트랩의 지점을 참조 해달라고
SuperUberDuper

23

업데이트 3/30/15

plus ça change ... 지금은 ember-cli-bootstrap-sassy를 사용 합니다. 부트 스트랩의 변수를 사용자 정의 할 수있게하면서 최소한의 찌그러짐을 가져 오는 것 같습니다.


업데이트 1/22/15

내가 원래 언급 한 lib 대신 위의 Johnny의 솔루션을 사용해야 할 것입니다. 또한 ember-cli-bootstrap-sass 를 좋아합니다. 프로젝트에서 직접 Bootstrap의 변수를 사용자 지정할 수 있기 때문입니다.

원본 2014 년 7 월 11 일

애드온 (0.35 이상)을 지원하는 ember-cli 버전을 사용하고 있다면 이제 ember-cli-bootstrap 패키지를 사용할 수 있습니다 . 앱의 루트에서

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

그게 다야!

참고 : @poweratom이 지적했듯이 bootstrap-for-ember를ember-cli-bootstrap 포함하도록 선택하는 다른 사람의 라이브러리입니다 . 따라서이 lib는 공식 부트 스트랩 버전과 동기화되지 않을 수 있습니다. 하지만 새 프로젝트에서 프로토 타이핑을 빠르게 할 수있는 좋은 방법입니다!


2
현재 버전을 현재 버전으로 변경하십시오. 현재 오늘 (0.0.39)은 ... 어쩌면 당신이 사용하고 심지어 버전이 아닙니다
야곱 반 Lingen의

현재 ember-cli-bootstrap에는 bootstrap.js가 포함되어 있지 않으므로 내장 된 자바 스크립트 메서드 또는 다양한 플러그인을 활용할 수 있기를 원합니다.
drew covi

2
이것이 그 자체로 설치하는 "권장"방법인지 확실하지 않습니다. 'ember-cli-bootstrap'프로젝트는 'ember-for-bootstrap'프로젝트에 의존합니다. 안타깝게도 후자의 프로젝트 관리자에 따르면, 그는 대신 '불씨 구성 요소'프로젝트를 대신 진행하고 있다고 발표했습니다. 따라서 그가 중단 한 부분 (현재 프로젝트가 부트 스트랩 3.0.0을 사용하고 있다고 생각합니다)을 선택하려는 노력이 없다면 부트 스트랩 버전은 곧 부실해질 것입니다 (이미 그렇습니다).
poweratom 2014

15
$> bower install --save bootstrap

그 후 당신에 두 줄에 다음을 추가 엠버 - CLI-builds.js (또는 Brocfile.js 당신이 Ember.js의 이전 버전을 사용하는 경우) :

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

그리고 voilà, 갈 준비!

2015 년 8 월 18 일 업데이트 : Ember.js 1.13에 도입 된 새로운 체계에 맞게 조정


1
엠버 - CLI의 최신 버전은 더 이상 brocfile.js를 포함하지 않습니다
미친 과학자에게

5
@MadScientist, 가져 오기에 'ember-cli-build.js'를 사용할 수 있으며 위의 단계는 여전히 작동합니다. (엠버 : 1.12.6)
앨런 프랜시스

부트 스트랩 재정이 좋아 함께 어떻게이 방법을 결합 할 bootswatch.com/flatly
벤자민 Udink 열 케이트

5

이것이 Ember-cli를 뒷받침하는 Broccoli로 공급 업체 CSS 파일을 패키징하는 방법입니다.

 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'
  });

어디에 vendor내 바우어 패키지가 사는 곳 폴더입니다. 그리고 assets내 CSS가 살기를 기대하는 곳입니다. Ember-cli 방식 인 Bower를 사용하여 Bootstrap을 설치했다고 가정합니다.

그런 다음 index.html에서 단순히 해당 vendor.css파일을 참조하고 있습니다.

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

건배.


시도했지만 concat이 Broccoli에 정의되어 있지 않다고 알려줍니다 (ReferenceError : concat이 정의되지 않음). 파일에 포함 된 스타일 시트의 경로를 변경하여 추가했습니다 : Brocfile.js 앱 폴더의 루트.
Guidouil 2014.04.30

1
플러그인을 설치 한 npm install broccoli-concat --save다음 상단의 Brocfile에서 :var concat = require('broccoli-concat');
Johnny Hall

5

SASS를 사용하는 경우 (아마를 통해 ember-cli-sass) bower_components이 조회 경로에 자동으로 추가됩니다. 이것은 Bower를 사용하고 Brocfile / ember-cli-build 파일을 모두 피할 수 있음을 의미합니다.

Bower를 사용하여 공식 SASS 버전의 Bootstrap을 설치합니다.

bower install --save bootstrap-sass

그런 다음 lib를 app.scss. 이것에 대한 좋은 점은 부트 스트랩을 가져 오기 전에 변수를 사용자 정의 할 수 있다는 것입니다.

$brand-primary: 'purple';

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

또는 $ ember install ember-cli-sass $ ember install ember-cli-bootstrap-sassy 그런 다음 app.css의 이름을 app.scss로 바꾸고 다음 줄을 추가하십시오. @import "bootstrap"
rmcsharry

3
bower install --save bootstrap

당신의 brocfile.js:

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

왜 이것이 실제로 표시되었는지 모르겠습니다. 이 진술을 어디에 넣을지 알지 못하면 명확하지 않을 수 있습니다. 그러나 그것은 잘 작동합니다 ... 내가 인정하는 추가 기능만큼 좋지 않을 수도 있습니다. 그들은 ember-cli-build.js파일에 들어가서 누군가 이것을 필요로하면 잘 작동합니다. Asp.Net MVC 프로젝트로 내 불씨를 먹이고 있으며 불씨 앱뿐만 아니라 해당 프로젝트에서 사용할 수 있어야했습니다.
hal9000

0

터미널에서 (노드 패키지 관리자를 사용하는 경우)

npm install bootstrap --save

ember-cli를 사용하여 설치된 부트 스트랩 가져 오기

ember-cli-build.js파일 열기

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');

NPM 설치 프로그램을 통해 부트 스트랩을 설치하면 그렇게됩니다.

이렇게하지 마십시오 :

app.import('./node_modules/bootstrap/dist/css/bootstrap.min.css');
app.import('./node_modules/bootstrap/dist/js/bootstrap.min.js');
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.