webpack-dev-server
を使用していて、ブートストラップを含めようとしています。
私はこのプロジェクト構造を持っています:
── css
│ └── bootstrap.min.css
│── js
| └── bootstrap.min.js
├── dist
├── index.html
├── package.json
├── server.js
├── src
│ ├── actions.js
│ ├── App.js
│ ├── components
│ ├── constants
│ ├── index.js
│ └── reducers.js
└── webpack.config.js
これはindex.html
です:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="css/bootstrap.min.css">
</head>
<body>
<div id='root'></div>
<script src="/static/bundle.js"></script>
</body>
</html>
サーバーを実行するたびに、次のタイプのエラーが発生します。
Cannot GET /css/bootstrap.min.css
これがwebpack.config.jsです:
var path = require('path');
var webpack = require('webpack');
module.exports = {
devtool: 'eval',
entry: [
'webpack-dev-server/client?http://localhost:3000',
'webpack/hot/only-dev-server',
'./src/index'
],
output: {
path: path.join(__dirname, 'dist'),
filename: 'bundle.js',
publicPath: '/static/'
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin()
],
module: {
loaders: [{
test: /\.js$/,
loaders: ['react-hot', 'babel'],
include: path.join(__dirname, 'src')
},
{
test: /\.css$/,
loader: 'style!css'
}]
},
resolve: {
extensions: ['', '.js', '.jsx', '.json']
}
};
他のすべては正常に機能します。問題はブートストラップだけです。さまざまな構成のバリエーションを試しましたが、機能しません。
また、index.js
のjavascriptから直接要求してみました。
import '../css/bootstrap.min.css';
そして、私はこのエラーを受け取ります:
ERROR in ./~/css-loader!./css/bootstrap.min.css
Module not found: Error: Cannot resolve 'file' or 'directory' ../fonts/glyphicons-halflings-regular.eot in /home/lhahn/dev/javascript/sha/css
@ ./~/css-loader!./css/bootstrap.min.css 6:3278-3330 6:3348-3400
私が気付いたところによると、webpackは、Bootstrap.min.cssをインポートしようとしたときに、プロジェクト内のフォントファイルを見つけようとしています。
Webpackはフォントファイルを読み込めないようです。
追加 file-loader
npm経由でプロジェクトにアクセスし、devDependenciesとして保存します。
npm install file-loader --save-dev
そして、webpack.config.jsのモジュールローダー構成を変更します
{
test: /\.(ttf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/,
loader: 'file-loader',
}
bootstrap through npmをインストールしてみてください。jquery、その依存関係も覚えておいてください。
これは、Bootstrap
がWebpack
と連携するために私が持っているものです。
{test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, loader: 'file'},
{test: /\.(woff|woff2)$/, loader: 'url?prefix=font/&limit=5000'},
{test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, loader: 'url?limit=10000&mimetype=application/octet-stream'},
{test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, loader: 'url?limit=10000&mimetype=image/svg+xml'}
そして
import 'bootstrap/dist/css/bootstrap.css';
また、ローカルでBootstrap
を使用している場合は、fonts
フォルダーと同じレベルのBootstrap
フォントを含むcss
フォルダーが必要です。この問題をすべて回避するには、npm
を使用することをお勧めします。
@krlの回答と比較して。これは私がモジュールrules
の下に置いたものです https://github.com/AngularClass/angular2-webpack-starter/blob/master/config/webpack.common.js
した後 $ npm install style-loader css-loader url-loader --save-dev
{test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, use: 'file-loader'},
{test: /\.(woff|woff2)$/, use: 'url-loader?prefix=font/&limit=5000'},
{test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, use: 'url-loader?limit=10000&mimetype=application/octet-stream'},
{test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, use: 'url-loader?limit=10000&mimetype=image/svg+xml'}
ブートストラップには、特定のローダーを必要とするさまざまなファイル/フォント/画像があります。次のリストのすべてのローダーが存在するかどうかを確認します。存在しない場合は、それらをdevDependenciesとしてインストールし、webpack.config.jsに次のように追加します。
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: "babel-loader"
},
{
test: /\.html$/,
loader: "html"
},
{
test: /\.css$/,
loader: "style-loader!css-loader"
},
{
test: /\.json$/,
loader: 'json-loader'
}, {
test: /\.txt$/,
loader: 'raw-loader'
}, {
test: /\.(png|jpg|jpeg|gif|svg|woff|woff2)$/,
loader: 'url-loader?limit=10000'
}, {
test: /\.(eot|ttf|wav|mp3)$/,
loader: 'file-loader'
}
]
そして、メイン/エントリファイル、つまりindex.js /app.jsにbootstrap css as:
import 'bootstrap/dist/css/bootstrap.css'
この構成は、ReactJSでbootstrap cssを使用するためだけのものです。