reactjs - 用于内部加载 CSS 的 Webpack 配置
问题描述
我有一个第三方库调用'react-big-scheduler',我已经像这样导入到我的组件中
import React from 'react';
import Scheduler, {SchedulerData, ViewTypes, DATE_FORMAT} from 'react-big-scheduler'
import moment from 'moment'
class MyScheduler extends React.Component {
render() {
// render scheduler
}
}
export default MyScheduler;
问题是当我要使用 webpack 编译这个组件时,我从 webpack 收到一个错误,说Module parse failed: Unexpected character '#' as the component 'SchedulerData' requires some CSS files from node_modules
错误:
ERROR in ./node_modules/react-big-scheduler/lib/css/antd-globals-hiding-hack.css 1:0
Module parse failed: Unexpected character '#' (1:0)
You may need an appropriate loader to handle this file type.
> #RBS-Scheduler-root {
| /* stylelint-disable at-rule-no-unknown */
| /* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */
@ ./node_modules/react-big-scheduler/lib/index.js 699:0-45
@ ./src/components/scheduler/MyScheduler.js
@ ./src/components/DataSet.js
@ ./src/components/App.js
@ ./src/index.js
@ multi (webpack)-dev-server/client?http://localhost (webpack)/hot/dev-server.js ./src/index.js
我如何配置 webpack 以内部加载这样的 CSS 文件,这是我的 webpackdev
环境配置
// 仅与开发相关的配置数据
const path = require('path');
const webpack = require('webpack');
const merge = require('webpack-merge');
const paths = require('./paths');
// import common webpack config
const common = require('./webpack-common-config.js');
module.exports = merge(common, {
entry: [paths.appIndexJs],
mode: 'development',
// devtool option controls if and how source maps are generated.
// see https://webpack.js.org/configuration/devtool/
// If you find that you need more control of source map generation,
// see https://webpack.js.org/plugins/source-map-dev-tool-plugin/
devtool: 'eval',
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NamedModulesPlugin(),
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify('development'),
},
}),
],
module: {
rules: [
{
// look for .js or .jsx files
test: /\.(js|jsx)$/,
// in the `src` directory
include: path.resolve(paths.appSrc),
exclude: /(node_modules)/,
use: {
// use babel for transpiling JavaScript files
loader: 'babel-loader',
options: {
presets: ['@babel/react'],
},
},
},
{
// look for .css or .scss files
test: /\.(css|scss)$/,
// in the `src` directory
include: [path.resolve(paths.appSrc)],
exclude: /(node_modules)/,
use: [
{
loader: 'style-loader',
},
{
loader: 'css-loader',
options: {
discardDuplicates: true,
importLoaders: 1,
// This enables local scoped CSS based in CSS Modules spec
modules: true,
// generates a unique name for each class (e.g. app__app___2x3cr)
localIdentName: '[name]__[local]___[hash:base64:5]',
},
},
{
loader: 'sass-loader',
options: {
sourceMap: true,
},
},
],
},
],
},
});
我错过了什么?需要你的帮助
解决方案
您可以使用 webpack 问题 #2168 中提到的 shebang-loader。只需将其添加到您的 .js 规则中,即可删除该行。
推荐阅读
- dbt - 在 dbt 中执行部署运行时权限被拒绝
- outlook - 在 OutLook 电子邮件中指示私人电子邮件的 Json 属性
- ubuntu - 如何在 ubuntu 上安装 Snap
- linux - NeoVim 状态栏
- android - 我收到“无法从 'C:\Users\DELL\AndroidStudioProjects\accc\gradle\wrapper\gradle-wrapper.properties' 加载包装器属性”
- chart.js - 如何使值显示在每个栏的顶部
- javascript - 蚂蚁设计背景滚动溢出隐藏无法正常工作
- django - 我的数据不会在 django 中进行后期操作。如何在此函数中进行 Post 调用?
- laravel - nginx 和 laravel 使用别名来使用 api
- c - 我想创建一个周期性地以 10ms 和 20ms 执行两个线程的 C 程序?