Итак, я недавно начал работать с Webpack, все работает нормально, кроме двух вещей:
- Нет папки вывода dist
- Webpack не распознает @ font-face относительныйpaths
Вот структура моего проекта:
![folder structure](https://i.stack.imgur.com/Flu1v.png)
Вот мой webpack.config.js:
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const webpack = require('webpack');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
const path = require('path');
require('dotenv').config();
const ENV = process.env.APP_ENV;
const isTest = ENV === 'test'
const isProd = ENV === 'prod';
function setDevTool() { // function to set dev-tool depending on environment
if (isTest) {
return 'inline-source-map';
} else if (isProd) {
return 'source-map';
} else {
return 'eval-source-map';
}
}
const config = {
devtool: setDevTool(),
}
if (isProd) {
config.plugins.push(
new UglifyJSPlugin(),
new CopyWebpackPlugin([{
from: __dirname + '/assets/'
}])
);
}
module.exports = config;
module.exports = {
entry: __dirname + "/src/js/index.js", // webpack entry point. Module to start building dependency graph
output: {
path: __dirname + '/dist/', // Folder to store generated bundle
filename: 'bundle.js', // Name of generated bundle after build
publicPath: '/' // public URL of the output directory when referenced in a browser
},
resolve: {
alias: {
fonts: path.resolve(__dirname, '/assets/fonts')
}
},
module: { // where we defined file patterns and their loaders
rules: [
{
test: /\.js$/,
use: 'babel-loader',
exclude: [
/node_modules/
]
},
{
test: /\.(sass|scss)/,
use: [
{
loader: 'style-loader'
},
{
loader: 'css-loader'
},
{
loader: 'sass-loader'
}
],
},
{
test: /\.css$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader'
]
},
{
test: /\.(ttf|eot|woff|woff2)$/,
use: {
loader: "file-loader",
options: {
name: "fonts/[name].[ext]",
outputPath: 'fonts/'
},
}
}
]
},
plugins: [ // Array of plugins to apply to build chunk
new HtmlWebpackPlugin({
template: __dirname + "/index.html",
inject: 'body'
}),
new MiniCssExtractPlugin({
filename: '[name].css',
chunkFilename: '[id].css'
}),
new webpack.DefinePlugin({
API_KEY: JSON.stringify(process.env.API_KEY)
})
],
devServer: { // configuration for webpack-dev-server
contentBase: './assets', //source of static assets
port: 7700, // port to run dev-server
}
};
Итак, я загружаю шрифты вот так:
@font-face {
font-family: 'Metropolis';
src: url('../../../assets/fonts/metropolis/Metropolis-Medium.woff2') format('woff2'),
url('../../../assets/fonts/metropolis/Metropolis-Medium.woff') format('woff'),
url('../../../assets/fonts/metropolis/Metropolis-Medium.ttf') format('truetype');
}
Вот вывод, когда я запускаю webpack-dev-server --history-api-fallback --inline --progress
![terminal output](https://i.stack.imgur.com/qvCG6.png)
Я пробовал так много учебных пособий, и самостоятельно, даже псевдонимы не работают.