現在のember-cliプロジェクトにTwitter Bootstrapを適切にインストールしようとしています。 bowerでbootstrapをインストールしました:
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-bootstrap をチェックアウトすると、bootstrapアセットが自動的にインポートされます。
ember install ember-bootstrap
さらに、アプリケーションにネイティブemberコンポーネントのスイートを追加し、bootstrap機能の操作をemberではるかに簡単にします。私はそれの著者であるので、私は少し偏見がありますが、それをチェックしてください! ;)
BASH:
bower install --save bootstrap
Brocfile.js:
app.import('vendor/bootstrap/dist/js/bootstrap.js');
app.import('vendor/bootstrap/dist/css/bootstrap.css');
JSはデフォルトでリンクされるapp.jsに追加され、CSSはassets/vendor.css
に追加されます。これは5月14日の時点でデフォルトで追加されます。
参考: 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]);
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();
プラスçaの変更... ember-cli-bootstrap-sassy を使用します。Bootstrapの変数をカスタマイズできるようにしながら、最小限の問題をもたらすようです。
おそらく、最初に言及したlibの代わりに、上記のJohnnyのソリューションを使用する必要があります。私は ember-cli-bootstrap-sass も好きです。なぜなら、プロジェクトでBootstrapの変数を直接カスタマイズできるからです。
アドオンをサポートしているバージョンのember-cli(0.35以降、私が信じている)を使用している場合、 ember-cli-bootstrap パッケージを使用できます。アプリのルートから、
npm install --save-dev ember-cli-bootstrap
それでおしまい!
注:@poweratomが指摘しているように、
ember-cli-bootstrap
は、 bootstrap-for-ember も含めることを選択した他の誰かのライブラリです。したがって、このlibは、公式のbootstrapバージョンと同期しなくなる可能性があります。ただし、新しいプロジェクトでプロトタイピングを迅速に行うための優れた方法であることに変わりはありません。
$> bower install --save bootstrap
その後、次の2行を追加します ember-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');
そして、ほら、行く準備ができました!
2015年8月18日更新: Ember.js 1.13で導入された新しいスキームに適応
これは、ベンダーのCSSファイルをブロッコリー(Ember-cliを支える)でパッケージ化する方法です。
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
フォルダーは、私のBowerパッケージが存在する場所です。そして、assets
は、CSSが存在することを期待している場所です。 Bowerを使用してBootstrapをインストールしたと仮定しています。これはEmber-cliの方法です。
次に、index.htmlで、単にvendor.css
ファイルを参照しています。
<link href="/assets/css/vendor.css" rel="stylesheet" type="text/css" media="all">
乾杯。
SASSを使用している場合(おそらくember-cli-sass
経由)、bower_components
が自動的にルックアップパスに追加されます。これは、Bowerを使用するだけでBrocfile/ember-cli-buildファイルを完全に回避できることを意味します。
BowerでBootstrapの公式SASSバージョンをインストールします
bower install --save bootstrap-sass
次に、app.scss
にlibをインポートします。これの良いところは、ブートストラップをインポートする前に変数をカスタマイズできることです:
$brand-primary: 'purple';
@import 'bower_components/bootstrap-sass/assets/stylesheets/bootstrap';
bower install --save bootstrap
あなたのbrocfile.js
:
app.import('bower_components/bootstrap/dist/js/bootstrap.js');
app.import('bower_components/bootstrap/dist/css/bootstrap.css');
ターミナル上(Node Package Managerを使用している場合)
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');
bootstrapがNPMインストーラーを介してインストールされている場合は、これが実行されます。
こんなことしないで:
app.import('./node_modules/bootstrap/dist/css/bootstrap.min.css');
app.import('./node_modules/bootstrap/dist/js/bootstrap.min.js');