bootstrap 的 Webpack 缺少加载程序
Webpack missing loader for bootstrap
我正在尝试通过 webpack 使用 bootstrap 并使用 npm 安装它。我想在我的 React 项目中使用它,所以我完成了以下设置,但我不断收到以下错误:
main.js
import React from 'react'
import 'bootstrap/dist/css/bootstrap.css'
const Main = () => (
<div className="container">yo</div>
)
Webpack 配置
var path = require('path');
var webpack = require('webpack');
module.exports = {
devtool: 'source-map',
entry: [
'webpack-hot-middleware/client',
'./client/pokeapp'
],
output: {
path: path.join(__dirname, 'dist'),
filename: 'bundle.js',
publicPath: '/static/'
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin()
],
module: {
loaders: [
// js
{
test: /\.js$/,
loaders: ['babel'],
include: path.join(__dirname, 'client')
},
// CSS
{
test: /\.css$/,
include: path.join(__dirname, 'client'),
loader: 'style-loader!css-loader'
},
{ test: /\.(woff|woff2|eot|ttf|svg)$/, loader: 'url'}
]
}
};
控制台错误
Module parse failed: /Users/jlei/Desktop/pokeapp/node_modules/bootstrap/dist/css/bootstrap.css Unexpected token (7:5)
You may need an appropriate loader to handle this file type.
SyntaxError: Unexpected token (7:5)
at Parser.pp.raise (/Users/jlei/Desktop/pokeapp/node_modules/acorn/dist/acorn.js:2221:15)
at Parser.pp.unexpected (/Users/jlei/Desktop/pokeapp/node_modules/acorn/dist/acorn.js:603:10)
at Parser.pp.semicolon (/Users/jlei/Desktop/pokeapp/node_modules/acorn/dist/acorn.js:581:61)
at Parser.pp.parseExpressionStatement (/Users/jlei/Desktop/pokeapp/node_modules/acorn/dist/acorn.js:966:10)
at Parser.pp.parseStatement (/Users/jlei/Desktop/pokeapp/node_modules/acorn/dist/acorn.js:730:24)
at Parser.pp.parseTopLevel (/Users/jlei/Desktop/pokeapp/node_modules/acorn/dist/acorn.js:638:25)
at Parser.parse (/Users/jlei/Desktop/pokeapp/node_modules/acorn/dist/acorn.js:516:17)
at Object.parse (/Users/jlei/Desktop/pokeapp/node_modules/acorn/dist/acorn.js:3098:39)
at Parser.parse (/Users/jlei/Desktop/pokeapp/node_modules/webpack/lib/Parser.js:902:15)
at DependenciesBlock.<anonymous> (/Users/jlei/Desktop/pokeapp/node_modules/webpack/lib/NormalModule.js:104:16)
@ ./client/components/Main.js 27:0-43
什么是意想不到的令牌?是因为我的装载机不工作吗?
您不必将 bootstrap 作为 npm 模块包含在内。您可以下载或使用 CDN 将 bootstrap 添加到您的 html 模板中。然后,您可以使用 'className' 属性而不是 'class' 将它应用到您的组件上。试试吧。
app.use('/css', express.static(__dirname + '/node_modules/bootstrap/dist/css'));
并在您的 html 文件中:
<link rel="stylesheet" href="/css/bootstrap.min.css">
此方法与下载 bootstrap 文件以改善延迟相同。
我测试了你的代码,加载程序没有问题但是这一行 include: path.join(__dirname, 'client')
导致了问题,如果你删除它你可以看到 bootstrap 与 webpack 捆绑得很好。
为了从 webpack 中获得更多,你可能需要一个单独的 css 文件,然后你可以使用 ExtractTextPlugin 来实现它。
它是如何工作的?
安装
npm i extract-text-webpack-plugin
在webpack中配置
{test: /\.css$/, loader: ExtractTextPlugin.extract({ fallbackLoader: 'style-loader', loader: 'css-loader' })}
并将其添加到插件中
new ExtractTextPlugin('yourStyle.css')
现在您应该在浏览器中有一个单独的 css 文件,而不是每个 css 样式标签
它是如何工作的
它将入口块中的每个 require("style.css") 移动到单独的 css 输出文件中。因此,您的样式不再内嵌到 javascript 中,而是在 css 捆绑文件 (styles.css) 中分开。如果您的样式表总量很大,它会更快,因为样式表包与 javascript 包并行加载。
希望对你有帮助。
我正在尝试通过 webpack 使用 bootstrap 并使用 npm 安装它。我想在我的 React 项目中使用它,所以我完成了以下设置,但我不断收到以下错误:
main.js
import React from 'react'
import 'bootstrap/dist/css/bootstrap.css'
const Main = () => (
<div className="container">yo</div>
)
Webpack 配置
var path = require('path');
var webpack = require('webpack');
module.exports = {
devtool: 'source-map',
entry: [
'webpack-hot-middleware/client',
'./client/pokeapp'
],
output: {
path: path.join(__dirname, 'dist'),
filename: 'bundle.js',
publicPath: '/static/'
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin()
],
module: {
loaders: [
// js
{
test: /\.js$/,
loaders: ['babel'],
include: path.join(__dirname, 'client')
},
// CSS
{
test: /\.css$/,
include: path.join(__dirname, 'client'),
loader: 'style-loader!css-loader'
},
{ test: /\.(woff|woff2|eot|ttf|svg)$/, loader: 'url'}
]
}
};
控制台错误
Module parse failed: /Users/jlei/Desktop/pokeapp/node_modules/bootstrap/dist/css/bootstrap.css Unexpected token (7:5)
You may need an appropriate loader to handle this file type.
SyntaxError: Unexpected token (7:5)
at Parser.pp.raise (/Users/jlei/Desktop/pokeapp/node_modules/acorn/dist/acorn.js:2221:15)
at Parser.pp.unexpected (/Users/jlei/Desktop/pokeapp/node_modules/acorn/dist/acorn.js:603:10)
at Parser.pp.semicolon (/Users/jlei/Desktop/pokeapp/node_modules/acorn/dist/acorn.js:581:61)
at Parser.pp.parseExpressionStatement (/Users/jlei/Desktop/pokeapp/node_modules/acorn/dist/acorn.js:966:10)
at Parser.pp.parseStatement (/Users/jlei/Desktop/pokeapp/node_modules/acorn/dist/acorn.js:730:24)
at Parser.pp.parseTopLevel (/Users/jlei/Desktop/pokeapp/node_modules/acorn/dist/acorn.js:638:25)
at Parser.parse (/Users/jlei/Desktop/pokeapp/node_modules/acorn/dist/acorn.js:516:17)
at Object.parse (/Users/jlei/Desktop/pokeapp/node_modules/acorn/dist/acorn.js:3098:39)
at Parser.parse (/Users/jlei/Desktop/pokeapp/node_modules/webpack/lib/Parser.js:902:15)
at DependenciesBlock.<anonymous> (/Users/jlei/Desktop/pokeapp/node_modules/webpack/lib/NormalModule.js:104:16)
@ ./client/components/Main.js 27:0-43
什么是意想不到的令牌?是因为我的装载机不工作吗?
您不必将 bootstrap 作为 npm 模块包含在内。您可以下载或使用 CDN 将 bootstrap 添加到您的 html 模板中。然后,您可以使用 'className' 属性而不是 'class' 将它应用到您的组件上。试试吧。
app.use('/css', express.static(__dirname + '/node_modules/bootstrap/dist/css'));
并在您的 html 文件中:
<link rel="stylesheet" href="/css/bootstrap.min.css">
此方法与下载 bootstrap 文件以改善延迟相同。
我测试了你的代码,加载程序没有问题但是这一行 include: path.join(__dirname, 'client')
导致了问题,如果你删除它你可以看到 bootstrap 与 webpack 捆绑得很好。
为了从 webpack 中获得更多,你可能需要一个单独的 css 文件,然后你可以使用 ExtractTextPlugin 来实现它。
它是如何工作的?
安装
npm i extract-text-webpack-plugin
在webpack中配置
{test: /\.css$/, loader: ExtractTextPlugin.extract({ fallbackLoader: 'style-loader', loader: 'css-loader' })}
并将其添加到插件中
new ExtractTextPlugin('yourStyle.css')
现在您应该在浏览器中有一个单独的 css 文件,而不是每个 css 样式标签
它是如何工作的
它将入口块中的每个 require("style.css") 移动到单独的 css 输出文件中。因此,您的样式不再内嵌到 javascript 中,而是在 css 捆绑文件 (styles.css) 中分开。如果您的样式表总量很大,它会更快,因为样式表包与 javascript 包并行加载。 希望对你有帮助。