无法使 bootstrap 与 Webpack 一起工作
Cannot make bootstrap work with Webpack
我正在使用 webpack-dev-server
并尝试包含 bootstrap。
我有这个项目结构:
── 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']
}
};
其他一切正常,问题是bootstrap。我尝试了很多不同的配置变体,但我无法让它工作。
我还尝试在 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好像无法加载字体文件
通过 npm 添加 file-loader
到您的项目,并将其保存为 devDependencies。
npm install file-loader --save-dev
并修改 webpack.config.js
中的模块加载器配置
{
test: /\.(ttf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/,
loader: 'file-loader',
}
尝试通过 npm 安装 bootstrap,同时记住 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
文件夹,其中包含与 css
文件夹相同级别的 Bootstrap
字体。最好使用 npm
来避免所有这些麻烦。
Bootstrap 有许多不同的 files/fonts/images 需要特定的加载程序。检查以下列表中的所有加载程序是否存在,如果不存在,则 npm 将它们安装为 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'
}
]
并且在您的 main/entry 文件中,即 index.js/app.js 包括 bootstrap css as :
import 'bootstrap/dist/css/bootstrap.css'
此配置仅适用于 bootstrap css 与 ReactJS 一起使用。
与@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'}
我正在使用 webpack-dev-server
并尝试包含 bootstrap。
我有这个项目结构:
── 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']
}
};
其他一切正常,问题是bootstrap。我尝试了很多不同的配置变体,但我无法让它工作。
我还尝试在 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好像无法加载字体文件
通过 npm 添加
file-loader
到您的项目,并将其保存为 devDependencies。npm install file-loader --save-dev
并修改 webpack.config.js
中的模块加载器配置{ test: /\.(ttf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/, loader: 'file-loader', }
尝试通过 npm 安装 bootstrap,同时记住 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
文件夹,其中包含与 css
文件夹相同级别的 Bootstrap
字体。最好使用 npm
来避免所有这些麻烦。
Bootstrap 有许多不同的 files/fonts/images 需要特定的加载程序。检查以下列表中的所有加载程序是否存在,如果不存在,则 npm 将它们安装为 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'
}
]
并且在您的 main/entry 文件中,即 index.js/app.js 包括 bootstrap css as :
import 'bootstrap/dist/css/bootstrap.css'
此配置仅适用于 bootstrap css 与 ReactJS 一起使用。
与@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'}