如何使用 webpack 和 postcss/cssnext 从 node_modules 导入字体
How can I import fonts from node_modules with webpack and postcss/cssnext
我需要使用 font-awesome。
PostCSS 尝试在源目录中查找字体,但在 node_modules/font-awesome/fonts
中找不到
错误文本:
Error: Can't resolve '../fonts/fontawesome-webfont.eot?v=4.7.0' in 'F:\OpenServer\domains\polymer-postcss\src'
导入:
@import "font-awesome/css/font-awesome.min.css";
webpack.config.js:
var cssPlugin = require('extract-text-webpack-plugin');
module.exports = {
entry: {app: './src/app.js'},
output: {
path: './dist',
filename: '[name].js',
publicPath: '/dist/',
},
plugins: [new cssPlugin({filename: '[name].css'}),],
module: {
rules: [
{
test: /\.css$/,
loader: cssPlugin.extract({
use: 'css-loader?importLoaders=1&sourceMap!postcss-loader?sourceMap',
}),
},
{
test: /\.(svg|png|gif|jpe?g|woff|woff2|eot|ttf)$/i,
use: "url-loader?limit=10000&name=[path][name].[ext]?[hash]"
},
],
},
}
postcss.config.js
module.exports = {
plugins: {
'postcss-import': {},
'postcss-cssnext': {
browsers: ['last 2 versions', '> 20%'],
},
},
};
您可以使用 fa-font-path
更改 font-awesome
查找字体的位置。在您的 CSS 中,您可以这样做:
@fa-font-path: "font-awesome/fonts";
@import "font-awesome/css/font-awesome.min.css";
虽然我通常只通过设置 $fa-font-path
变量在 .scss
中看到它。 postcss-import
会抱怨 import 语句需要放在第一位,但至少它仍然有效。
您也可以在 CSS 中使用 @import
语法而不使用 postcss-import
,css-loader
支持它。唯一的区别是您需要以 ~
开始您的路径,以表明它应该被解析为 node_module
,否则它会被解释为相对路径(如 [=24= 中所示) ]).没有 postcss-import
,下面的工作不会产生警告:
@fa-font-path: "font-awesome/fonts";
@import "~font-awesome/css/font-awesome.min.css";
这个 PostCSS 模块真的解决了我的问题
我需要使用 font-awesome。
PostCSS 尝试在源目录中查找字体,但在 node_modules/font-awesome/fonts
错误文本:
Error: Can't resolve '../fonts/fontawesome-webfont.eot?v=4.7.0' in 'F:\OpenServer\domains\polymer-postcss\src'
导入:
@import "font-awesome/css/font-awesome.min.css";
webpack.config.js:
var cssPlugin = require('extract-text-webpack-plugin');
module.exports = {
entry: {app: './src/app.js'},
output: {
path: './dist',
filename: '[name].js',
publicPath: '/dist/',
},
plugins: [new cssPlugin({filename: '[name].css'}),],
module: {
rules: [
{
test: /\.css$/,
loader: cssPlugin.extract({
use: 'css-loader?importLoaders=1&sourceMap!postcss-loader?sourceMap',
}),
},
{
test: /\.(svg|png|gif|jpe?g|woff|woff2|eot|ttf)$/i,
use: "url-loader?limit=10000&name=[path][name].[ext]?[hash]"
},
],
},
}
postcss.config.js
module.exports = {
plugins: {
'postcss-import': {},
'postcss-cssnext': {
browsers: ['last 2 versions', '> 20%'],
},
},
};
您可以使用 fa-font-path
更改 font-awesome
查找字体的位置。在您的 CSS 中,您可以这样做:
@fa-font-path: "font-awesome/fonts";
@import "font-awesome/css/font-awesome.min.css";
虽然我通常只通过设置 $fa-font-path
变量在 .scss
中看到它。 postcss-import
会抱怨 import 语句需要放在第一位,但至少它仍然有效。
您也可以在 CSS 中使用 @import
语法而不使用 postcss-import
,css-loader
支持它。唯一的区别是您需要以 ~
开始您的路径,以表明它应该被解析为 node_module
,否则它会被解释为相对路径(如 [=24= 中所示) ]).没有 postcss-import
,下面的工作不会产生警告:
@fa-font-path: "font-awesome/fonts";
@import "~font-awesome/css/font-awesome.min.css";
这个 PostCSS 模块真的解决了我的问题