У меня есть следующий файл конфигурации webpack:
const path = require('path'),
MiniCSSExtractPlugin = require('mini-css-extract-plugin'),
CleanWebpackPlugin = require('clean-webpack-plugin'),
postCssPresetEnv = require('postcss-preset-env'),
postCssScss = require('postcss-scss'),
glob = require('glob'),
autoprefixer = require('autoprefixer');
module.exports = {
entry: {
'material': glob.sync("./src/js/**/*.js"),
'material-light': './src/sass/material.scss'
},
output: {
path: path.resolve(__dirname, '/'),
filename: process.env.NODE_ENV === 'development' ? './dist/js/[name].js' : './docs/dist/js/[name].js',
publicPath: 'docs/dist/'
},
module: {
rules: [
{
test: /\.js$/,
exclude: ['/node_modules/', './dist/', '/src/css', '/docs'],
use: [
'babel-loader',
{
loader: 'eslint-loader',
options: {
fix: true
}
}
]
},
{
test: /\.(sa|sc|c)ss$/,
exclude: ['/node_modules', './dist', '/src/js', '/docs'],
use: [
MiniCSSExtractPlugin.loader,
{
loader: 'css-loader',
options: {
sourceMap: true,
minimize: process.env.NODE_ENV === 'production',
publicPath: 'docs/dist/'
}
},
{
loader: 'postcss-loader',
options: {
sourceMap: true,
syntax: postCssScss,
plugins: () => [
autoprefixer,
postCssPresetEnv({
stage: 0
}),
],
},
},
{
loader: 'sass-loader',
options: {
sourceMap: true
}
}
]
}
]
},
devServer: {
overlay: true,
contentBase: path.join(__dirname, './docs/'),
publicPath: '/dist/',
watchContentBase: true,
open: true,
},
devtool: process.env.NODE_ENV === 'development' ? 'cheap-module-eval-source-map' : 'source-map',
plugins: [
new MiniCSSExtractPlugin({
filename: process.env.NODE_ENV === 'development' ? './dist/css/[name].css' : './docs/dist/css/[name].css',
}),
new CleanWebpackPlugin(['./dist/', './docs/dist']),
]
};
Со следующей файловой структурой:
/
/docs/
All html files
/src/
/js/
All js files
/sass/
All sass files
webpack.config.js
packages.json
Я пытаюсь сделать следующее. Для разработки я использую сервер webpack для обслуживания содержимого директории /docs
. Однако я хотел бы, чтобы URL-адреса в документах были относительно URL-адреса /docs
, чтобы я мог использовать страницы GitHub. Значение в /docs/index.html
Я хотел бы сослаться на файл material.js
как: ./dist/js
. А для material-light.css
как: ./dist/css
. Я хотел бы сделать это, потому что при запуске производства файлы js, css сохраняются в каталоге docs/dist/(css/js)
.
Но я не могу получить правильную ссылку. В приведенной выше конфигурации у меня есть docs/dist/
для общего пути, но docs/dist/js
также не работает. Проблема актуальна как для файлов js, так и для файлов css.
Итак, мой вопрос: как я могу заставить publicPath
работать как на сервере webpack dev, так и на страницах github?
Связано, но не работало: