我正在使用webpack和ReactJS,并尝试弄清楚如何在npm安装normalize.css(https://necolas.github.io/normalize.css/)之后使用它。
在npm安装后,normalize.css是否立即应用?如果我想编辑它,该怎么办?
在npm安装后,normalize.css是否立即应用?如果我想编辑它,该怎么办?
你可以在React中使用通过npm安装的normalize.css
,方法如下:
import React from 'react';
import ReactDOM from 'react-dom';
import 'normalize.css'; // Note this
const root = document.getElementById('root');
ReactDOM.render(<h1>Hello, World!</h1>, root);
结果将会是:
结果如下:
请注意,这段文本已被 normalize.css
进行了样式设置。
为了使其正常工作,您需要类似以下的设置:
1) 将上述 JavaScript 添加到 index.js
中
2) 将 normalize.css
(以及相关文件)添加到 package.json
中:
{
"dependencies": {
"normalize.css": "^5.0.0",
"react": "^16.3.2",
"react-dom": "^16.3.2"
},
"devDependencies": {
"babel-core": "^6.26.3",
"babel-loader": "^7.1.4",
"babel-preset-env": "^1.7.0",
"babel-preset-react": "^6.24.1",
"css-loader": "^0.28.11",
"style-loader": "^0.21.0",
"webpack-dev-server": "^3.1.4",
"webpack": "^4.8.3"
}
}
3) 在 webpack.config.js
中使用正确的加载器:
module.exports = {
mode: 'development',
module: {
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
options: { presets: ['env', 'react'] }
},
{
test: /\.css$/,
use: [{ loader: 'style-loader' }, { loader: 'css-loader' }]
}
]
}
};
4) 添加一个 index.html
文件来查看结果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="root"></div>
<script src="main.js"></script>
</body>
</html>
4) 安装所有内容。
npm install
5) 启动Webpack开发服务器:
./node_modules/.bin/webpack-dev-server --open
注意:我正在使用版本为5.0.0的normalize.css。如果您使用6.0.0或更高版本,则字体将不同。在该版本中,所有有争议的规则都已从normalize.css中删除。添加: 如果你正在使用 WebPack 4 并且无法导入 normalize.less,请尝试使用 normalize.css。
@import "../node_modules/normalize.css/normalize.css";
我的规则:
module: {
rules: [{
test: /\.css$/,
use: [MiniCssExtractPlugin.loader,
"css-loader"
]
},
{
test: /\.less$/,
use: [
MiniCssExtractPlugin.loader,
"css-loader",
"less-loader"
]
}
]
};
@import "~normalize.css/normalize.css";
一旦你使用import
或require
,Webpack将会包含它,除非你设置不包含。例如:
注意:我正在使用Webpack 2。
module: {
rules: [ // from 'loaders' to 'rules'
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/,
},
{
test: /\.sass$/,
exclude: /node_modules/,
loader: ExtractTextPlugin.extract({
fallbackLoader: 'style-loader',
loader: ['style-loader','sass-loader']
})
}
]
}
exclude
属性可以处理这个问题。
例如:
// public/assets/style.scss
@import 'substyle1';
@import 'substyle1';
body {
background-color: red;
}
// src/index.js -> entry file
import '../public/assets/style.scss';
// Webpack will know that you are importing your SCSS / SASS file
style.css
并在入口文件中导入它,以使其对所有组件都可用。 - ickyrr
import 'normalize-css/normalize.css'
,只导入 'normalize.css' 会在当前目录中查找它。 - Grey Vugrinnormalize-css
不同于normalize.css
。自 2014 年以来,normalize-css
没有更新:https://github.com/chrisdickinson/normalize-css - jumoel