![](/img/trans.png)
[英]Should I use fontawesome-free or angular-fontawesome
[英]Module not found: Error: Can't resolve './@fortawesome/fontawesome-free/css/fontawesome.css'
我正在嘗試在 webpack 4 中使用font-awesome 5.1.0 。 webpack 配置文件的內容:
const HtmlWebPackPlugin = require("html-webpack-plugin");
const CopyWebpackPlugin = require("copy-webpack-plugin");
const path = require("path");
const autoprefixer = require('autoprefixer');
module.exports = {
entry: ["./src/index.js", "./src/index.scss", "react-hot-loader/patch"],
output: {
path: path.resolve(__dirname, "dist"),
filename: "bundle.[hash].js"
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env", "@babel/preset-react"]
}
}
},
{
test: /\.html$/,
use: [
{
loader: "html-loader",
options: {
minimize: true
}
}
]
},
{
test: /\.(sass|scss)$/,
use: [
{
loader: "file-loader",
options: {
name: "bundle.css"
}
},
{ loader: "extract-loader" },
{
loader: "css-loader"
},
{
loader: "postcss-loader",
options: {
plugins: () => [autoprefixer({ grid: false })]
}
},
{
loader: "sass-loader",
options: {
includePaths: ["./node_modules"]
}
}
]
},
{
test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/,
use: [
{
loader: "file-loader",
options: {
name: "[name][hash].[ext]",
outputPath: "fonts/"
}
}
]
}
]
},
plugins: [
new HtmlWebPackPlugin({
template: "./public/index.html",
filename: "./index.html"
}),
new CopyWebpackPlugin([
{
from: "public"
}
])
]
};
在 index.scss 文件中:
@import "@fortawesome/fontawesome-free/css/fontawesome.css";
@import "@material/button/mdc-button.scss";
@import "@material/drawer/mdc-drawer.scss";
@import "@material/top-app-bar/mdc-top-app-bar.scss";
@import "@material/list/mdc-list.scss";
@import "./App/scss/app.scss";
* {
padding: 0;
margin: 0;
}
html, body {
height: 100%;
width: 100%;
}
#root {
display: flex;
flex-direction: row;
box-sizing: border-box;
height: 100%;
width: 100%;
}
正如你可以在圖片上:
Font-awesome 是從正確的位置導入的,但我遇到了編譯器錯誤:
ERROR in ./src/index.scss
Module not found: Error: Can't resolve './@fortawesome/fontawesome-free/css/fontawesome.css' in '/home/developer/Desktop/reasonreact/cockpit/src'
@ ./src/index.scss
@ multi (webpack)-dev-server/client?http://localhost:9000 webpack/hot/dev-server ./src/index.js ./src/index.scss react-hot-loader/patch
我究竟做錯了什么?
更新
我將 webconfig 更改為:
{
test: /\.(sass|scss)$/,
use: [
{
loader: "file-loader",
options: {
name: "bundle.css"
}
},
{ loader: "extract-loader" },
{
loader: "css-loader"
},
{
loader: "postcss-loader",
options: {
plugins: () => [autoprefixer({ grid: false })]
}
},
{
loader: "sass-loader",
options: {
includePaths: ["./node_modules", "src", "."]
}
}
]
},
我有以下錯誤:
ERROR in ./src/index.scss
Module build failed (from ./node_modules/extract-loader/lib/extractLoader.js):
NonErrorEmittedError: (Emitted value instead of an instance of Error) ReferenceError: require is not defined
at runLoaders (/home/developer/Desktop/reason-react/cockpit/node_modules/webpack/lib/NormalModule.js:300:13)
at /home/developer/Desktop/reason-react/cockpit/node_modules/loader-runner/lib/LoaderRunner.js:364:11
at /home/developer/Desktop/reason-react/cockpit/node_modules/loader-runner/lib/LoaderRunner.js:230:18
at context.callback (/home/developer/Desktop/reason-react/cockpit/node_modules/loader-runner/lib/LoaderRunner.js:111:13)
at process._tickCallback (internal/process/next_tick.js:68:7)
@ multi (webpack)-dev-server/client?http://localhost:9000 webpack/hot/dev-server ./src/index.js ./src/index.scss react-hot-loader/patch
有點晚了,但也許它可以幫助某人:
我認為而不是
@import "@fortawesome/fontawesome-free/css/fontawesome.css";
它應該是
@import '~@fortawesome/fontawesome-free/css/fontawesome.css';
這個導入路徑似乎搞砸了..
ERROR in ./src/index.scss
Module not found: Error: Can't resolve './@fortawesome/fontawesome-free/css/fontawesome.css' in '/home/developer/Desktop/reasonreact/cockpit/src'
@ ./src/index.scss
它不是在您的 node_modules 文件夾中尋找 fortawesome。
您可以明確嘗試從 node_modules 導入它嗎?
例如...
@import "../path/to/node_modules/@fortawesome/fontawesome-free/css/fontawesome.css";
另外,我認為它沒有在 node_modules 中查找的原因是因為 webpack 需要有一個 SASS 加載器配置條目,你有一個,但我很好奇你的路徑中的點符號是否以某種方式拋棄了 webpack。 你也可以試試下面的嗎?
/**
* Config sassLoader paths for imports from node_modules
*/
sassLoader: {
includePaths: [
'node_modules', 'src', '.'
]
},
您可能只是忘記在加載程序中包含css
文件: test: /\\.(sass|scss|css)$/,
(因為您嘗試導入 fontawesome. css ,但不是scss )
在終端中運行“npm audit fix”修復了我的問題
我有同樣的問題
webpack css-loader 不支持(scss 和 .css 捆綁)你需要 sass 來做
只需安裝 sass-loader 和 node-sass(閱讀注釋)
npm install -D sass-loader node-sass
網絡包
module.exports = {
module: {
rules: [
{
test: /\.scss$/,
use: [
'vue-style-loader',
'css-loader',
'sass-loader'<--------------------this is you need----------------
]
}
]
},
// plugin omitted
}
注意:人們在安裝npm install -d sass-loader
時會出錯,但是 sass-loader 帶來了最新版本的 sass 意味着你得到 sass-loader:11.0.0 或更高版本,所以 webpack 4 不支持最新的 sass-loader
解決方案
你的 webpack 版本是 4,所以你只需要低於 sass loader 版本 10
npm install -D node-sass
npm install -D sass-loader@^10
我也為你附上了我的 webpack(參考)我使用了 vue 框架
const HtmlWebpackPlugin = require('html-webpack-plugin')
const VueLoaderPlugin = require('vue-loader/lib/plugin')
const webpack = require('webpack')
module.exports = {
entry: './src/main.js',
module: {
rules: [{
test: /\.js$/,
use: 'babel-loader'
},
{
test: /\.vue$/,
use: 'vue-loader'
},
{
test: /\.(sass|scss|css)$/,
use: ['vue-style-loader', 'css-loader','sass-loader'],
},
]
},
devServer: {
open: true,
hot: true
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html',
}),
new VueLoaderPlugin(),
new webpack.HotModuleReplacementPlugin()
],
// resolve: {
// alias: {
// vue$: "vue/dist/vue.runtime.esm.js",
// },
// extensions: ["*", ".js", ".vue", ".json"],
// },
}
只需安裝它:
npm i @fortawesome/fontawesome-free
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.