Je travaille avec un webpack-dev-server
et j'essaie d'inclure le bootstrap.
J'ai la structure de ce projet:
── 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
C'est le 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>
Chaque fois que j'exécute le serveur, j'obtiens une erreur du type:
Cannot GET /css/bootstrap.min.css
Voici le 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']
}
};
Tout le reste fonctionne bien, le problème est juste bootstrap. J'ai essayé beaucoup de variations différentes sur les configurations, mais je ne peux pas le faire fonctionner.
J'ai aussi essayé de l'exiger directement à partir de javascript sur index.js
:
import '../css/bootstrap.min.css';
Et je reçois cette erreur:
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
D'après ce que j'ai compris, Webpack tente de trouver un fichier de polices dans mon projet lors de l'importation de Bootstrap.min.css.
Il semble que Webpack ne puisse pas charger les fichiers de polices.
Ajoutez file-loader
via npm à votre projet et enregistrez-le sous devDependencies.
npm install file-loader --save-dev
Et modifiez la configuration des chargeurs de modules dans votre webpack.config.js
{
test: /\.(ttf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/,
loader: 'file-loader',
}
Essayez d’installer bootstrap avec npm , n'oubliez pas également jquery, sa dépendance
Voici ce que j'ai pour que Bootstrap
puisse travailler avec 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'}
et
import 'bootstrap/dist/css/bootstrap.css';
De même, si vous utilisez Bootstrap
localement, vous devez disposer du dossier fonts
, contenant les polices Bootstrap
au même niveau que le dossier css
. Il vaut mieux utiliser npm
pour éviter tous ces problèmes.
par rapport à @krl réponse. C’est ce que j’ai mis sous les modules rules
dans https://github.com/AngularClass/angular2-webpack-starter/blob/master/config/webpack.common.js
après avoir $ 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'}
Bootstrap a un certain nombre de fichiers/polices/images différents qui nécessitent des chargeurs spécifiques. Vérifiez si tous les chargeurs de la liste suivante sont présents, sinon npm les installe en tant que devDependencies et ajoutez-les dans webpack.config.js en tant que:
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'
}
]
Et dans votre fichier principal/entry, c.-à-d. Index.js/app.js inclut Bootstrap css comme:
import 'bootstrap/dist/css/bootstrap.css'
Cette configuration est uniquement destinée à l'utilisation de bootstrap css avec ReactJS.