- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Typescript 和 Webpack 4 构建一个 React 应用程序。我试图在我的组件中包含来自 scss 文件的类名,但是当我这样做时,类名是未定义的。
我遇到的最大问题是很多教程和在线页面都推荐使用 ExtractTextPlugin,但这与 webpack 4 不兼容。这就是为什么我必须使用 MiniCssExtractPlugin 和 typings-for-css-modules-装载机。
下面是我的package.json中的依赖
"devDependencies": {
"@types/react": "^16.4.14",
"@types/react-dom": "^16.0.7",
"@types/react-redux": "^6.0.9",
"@types/redux-saga": "^0.10.5",
"awesome-typescript-loader": "^5.2.1",
"css-loader": "^1.0.0",
"html-webpack-plugin": "^3.2.0",
"mini-css-extract-plugin": "^0.4.2",
"node-sass": "^4.9.3",
"npm-check": "^5.8.0",
"sass-loader": "^7.1.0",
"source-map-loader": "^0.2.4",
"style-loader": "^0.23.0",
"typescript": "^3.0.3",
"typings-for-css-modules-loader": "^1.7.0",
"webpack": "^4.18.1",
"webpack-cli": "^3.1.0"
},
"dependencies": {
"es6-promise": "^4.2.5",
"little-loader": "^0.2.0",
"query-string": "^6.1.0",
"react": "^16.5.0",
"react-dom": "^16.5.0",
"react-redux": "^5.0.7",
"redux": "^4.0.0",
"redux-saga": "^0.16.0"
}
我的 webpack.config.js 在模块 => 规则下包含以下内容以及其他用于处理我的 typescript 文件等的内容
{
test: /\.(s*)css$/,
use: [
"style-loader",
{
loader: MiniCssExtractPlugin.loader,
options:
{
publicPath: path.resolve(__dirname, './dist')
}
},
{
loader: 'typings-for-css-modules-loader',
options:
{
importLoaders: 1,
modules: true,
namedExport: true,
camelCase: true,
localIdentName: '[name]_[local][hash:base64:5]',
banner: "// *** Generated File - Do not Edit ***"
}
},
{
loader: "sass-loader",
options:
{
sourceMap: true,
modules: true
}
}
]
}
我有一个名为 map.styles.scss 的 scss 文件,它只包含以下内容
.map-container {
margin: 0 auto;
overflow: hidden;
}
当 webpack 构建运行时,它会生成以下名为 map.styles.scss.d.ts 的文件
// *** Generated File - Do not Edit ***
export const mapContainer: string;
我现在可以在我的 typescript 中引用该文件,并适本地引用类名,如下所示
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import * as styles from './map.styles.scss';
export class Map extends React.Component {
render() {
return (
<div ref='map' className={styles.mapContainer}>
Loading map...
</div>
);
}
}
问题是虽然样式是一个对象,但 mapContainer 是未定义的。因此,在构建我的应用程序时,className 不存在,因为没有可应用的值,因此样式不起作用。
我觉得很奇怪,我可以引用样式,但我没有得到代表类的字符串。谁能指出我正确的方向?
最佳答案
我发现了问题。
问题是同时使用 MiniCssExtractPlugin 和样式加载器。这生成了样式对象试图引用的两个文件。
其中一个生成了一个键字典,该字典匹配 styles.mapContainer 对一个值的引用,另一个包含大量 javascript,我不是 100% 清楚它做了什么。
我需要一本带有值(value)字典的书。通过删除样式加载器,我只剩下字典文件而不是另一个文件,然后因为没有歧义,它选择了本地化的类名。
以下是我用于生成 css 的最终 webpack 配置。
{
test: /\.(s*)css$/,
use: [
{
loader: MiniCssExtractPlugin.loader,
options:
{
publicPath: path.resolve(__dirname, './dist')
}
},
{
loader: 'typings-for-css-modules-loader',
options:
{
importLoaders: 1,
modules: true,
namedExport: true,
camelCase: true,
localIdentName: '[name]_[local][hash:base64:5]',
banner: "// *** Generated File - Do not Edit ***"
}
},
{
loader: "sass-loader",
options:
{
sourceMap: true,
modules: true
}
}
]
}
关于javascript - 每次使用 Typescript、Webpack 4 和 React 我包含一个 scss 文件时,样式名称在 className 中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52413990/
我的意思是: body.class1 div.class1 { color: blue; } div.class1.class2 { color: red; } Hello
编译的时候一直报这个错,不知道为什么。我看过this发布和this一个,但它们似乎是不同的问题。 相关代码结构为: // main.cpp #include "MyClass.h" int main(
这个问题已经有答案了: What is a raw type and why shouldn't we use it? (16 个回答) 已关闭 9 年前。 标题非常不言自明。请问原始类型,例如Arr
我想知道在哪里记录了这种形式的构造函数调用。这种语法显然适用于 Visual Studio 6.0 版(我知道它不能使用 G++ 编译)。 请注意,我不是在寻找替代品,也不需要知道它是好是坏。 cla
这是一个菜鸟问题,抱歉,我来自 Java,不知道为什么我的 OO 东西不起作用。我有这个主要的: #include #include "Foo.h" //changed name using nam
我正在使用 Code::Blocks 构建我的项目,其中包含三个文件:main.cpp、TimeSeries.cpp、TimeSeries.h。 TimeSeries.h 为 TimeSeries 类
我想... 扫描文档以查找具有特定类名的所有元素 对该元素的 innerHTML 执行一些关键功能 更改该元素的类名,这样如果我稍后进行另一次扫描,我就不会重做该元素 我认为这段代码可以工作,但出于某
我有一些 JQuery 代码,可将特定类的所有 HTML 元素转换为文本区域元素。 我的问题:我使用 JQuery(.addClass()) 将元素类从“可更新”更改为“可更新 P”。但是当我去搜索所
为什么按属性选择类 [class="classname"] 代替按类选择 .classname ?在考虑跨电子邮件客户端兼容的电子邮件时,这样做有什么好处吗? 编辑:我完全了解每个选择器是如何工作的,
所以基本上我使用 MyLocationOverlay 在 map 上绘制用户位置。然而,我不喜欢它的绘制方式。我想要拥有自己的图标并删除该位置周围的圆圈。 我知道如何执行此操作的唯一方法是创建一个扩展
根据另一个类中给定的输入,此类必须从要在其中找到该变量的 4 个类之一检索变量。例如。如果输入是 s,则此类要查找的变量可在 Sumup.counter 中找到,而当输入是 a 时,它需要的变量可以在
从命令行运行基本的 java 程序需要 3 个步骤: 编写代码: 公共(public)类HelloWorld {公共(public)静态无效主(字符串[] args){ System.out.prin
例如 - 我只有下一行代码,如果 span 包含从 outcome 开始的某些 class ,我需要重新识别--事件。如果是这样 - 通过 JS 删除它。 我们有什么想法可以实现它吗? 我接下来尝试
我正在学习 Java,所以请多多包涵,即使这对您来说很简单。 我正在使用两个链表: private LinkedList x; private LinkedList y; public List()
相关:Jquery timeout for doubleclick 鉴于此代码: function handleClick() { var div = $(this); var origina
#ifndef RESERVATIONS_H_INCLUDED #define RESERVATIONS_H_INCLUDED #include #include class Reservatio
我在我正在处理的代码库中看到一些代码如下: ZfooName::ZfooName(int magoo) : ZfooName() { fGoo = magoo; } 我假设这是一
我要找 IReadOnlyCollection 使用 WebDriverWait 确保元素已在页面上呈现。 这是我的代码 WebDriverWait wait = new WebDriverWait
我有这两种方法来编写构造函数。 className()和 className._() 它们之间有什么区别,我什么时候应该使用哪个? class GlobalState{ final Ma
下面的方法 公共(public) JSound() { } 从来没有人要求提供此代码?有什么原因吗? 如果我不能让它以这种方式工作,还有第二种方法可以使用鼠标监听器吗?它需要一个非静态方法,所以我不确
我是一名优秀的程序员,十分优秀!