mirror of
https://github.com/generativefm/generative.fm.git
synced 2026-01-09 14:48:14 -05:00
106 lines
2.5 KiB
JavaScript
106 lines
2.5 KiB
JavaScript
'use strict';
|
|
|
|
const path = require('path');
|
|
const fs = require('fs').promises;
|
|
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
|
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
|
const CleanWebpackPlugin = require('clean-webpack-plugin');
|
|
const { EnvironmentPlugin } = require('webpack');
|
|
|
|
const makeConfig = alias => ({
|
|
mode: 'development',
|
|
devtool: 'source-map',
|
|
entry: ['@babel/polyfill', './src'],
|
|
output: {
|
|
path: path.join(__dirname, 'dist'),
|
|
filename: '[name].[hash].js',
|
|
},
|
|
resolve: {
|
|
alias,
|
|
extensions: ['.js', '.jsx', '.json'],
|
|
mainFields: ['generativeFmManifest', 'browser', 'module', 'main'],
|
|
},
|
|
devServer: {
|
|
historyApiFallback: true,
|
|
port: 9999,
|
|
},
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: [/\.js$/, /\.jsx$/],
|
|
exclude: /node_modules/,
|
|
use: 'babel-loader',
|
|
},
|
|
{
|
|
test: [/\.css$/, /\.scss$/],
|
|
use: [
|
|
MiniCssExtractPlugin.loader,
|
|
'css-loader',
|
|
{
|
|
loader: 'sass-loader',
|
|
options: {
|
|
includePaths: ['./src/styles'],
|
|
},
|
|
},
|
|
],
|
|
},
|
|
{
|
|
test: /\.png$/,
|
|
use: [
|
|
{ loader: 'url-loader', options: { limit: 10 * 1024 } },
|
|
'image-webpack-loader',
|
|
],
|
|
},
|
|
{
|
|
test: /\.gfm\.manifest\.json/,
|
|
use: path.resolve('./piece-loader.js'),
|
|
type: 'javascript/auto',
|
|
},
|
|
{
|
|
test: [/\.mp3$/, /\.ico$/],
|
|
use: 'file-loader',
|
|
},
|
|
{
|
|
test: /\.webmanifest/,
|
|
use: ['file-loader', 'app-manifest-loader'],
|
|
},
|
|
{
|
|
test: /\.js$/,
|
|
include: /node_modules\/tone/,
|
|
use: 'source-map-loader',
|
|
enforce: 'pre',
|
|
},
|
|
],
|
|
},
|
|
plugins: [
|
|
new MiniCssExtractPlugin({
|
|
filename: '[name].[hash].css',
|
|
}),
|
|
new HtmlWebpackPlugin({
|
|
template: './index.template.html',
|
|
}),
|
|
new CleanWebpackPlugin(['dist']),
|
|
new EnvironmentPlugin({
|
|
SAMPLE_FILE_HOST: '//localhost:6969',
|
|
}),
|
|
],
|
|
});
|
|
|
|
const aliasPromise = fs
|
|
.readdir(path.resolve('./src'))
|
|
.then(filenames =>
|
|
Promise.all(
|
|
filenames.map(filename => fs.lstat(path.resolve(`./src/${filename}`)))
|
|
).then(stats => filenames.filter((_, i) => stats[i].isDirectory()))
|
|
)
|
|
.then(dirnames =>
|
|
dirnames.reduce((alias, dirname) => {
|
|
alias[`@${dirname}`] = path.resolve(`./src/${dirname}`);
|
|
return alias;
|
|
}, {})
|
|
);
|
|
|
|
const configPromise = aliasPromise.then(alias => makeConfig(alias));
|
|
|
|
module.exports = configPromise;
|