PHP WebShell
Текущая директория: /opt/BitGoJS/modules/web-demo/webpack
Просмотр файла: base.config.js
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const { join } = require('path');
const CopyPlugin = require('copy-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const path = require('path');
const outputConfig = {
destPath: './dist',
};
// Entry points
// https://webpack.js.org/concepts/entry-points/
const entryConfig = ['./src/index.tsx', './src/assets/stylesheets/app.scss'];
// Copy files from src to dist
// https://webpack.js.org/plugins/copy-webpack-plugin/
const copyPluginPatterns = {
patterns: [
{ from: './src/assets/images', to: 'images' },
{ from: './src/assets/fonts', to: 'fonts' },
{ from: './src/assets/vendor', to: 'js' },
],
};
// Dev server setup
// https://webpack.js.org/configuration/dev-server/
const devServer = {
static: {
directory: path.join(__dirname, outputConfig.destPath),
},
historyApiFallback: true,
};
// SCSS compile
const scssConfig = {
destFileName: 'css/app.min.css',
};
// Production terser config options
// https://webpack.js.org/plugins/terser-webpack-plugin/#terseroptions
const terserPluginConfig = {
extractComments: false,
terserOptions: {
compress: {
drop_console: true,
},
},
};
const aliasItems = {
'@src': join(__dirname, '../src'),
'@images': join(__dirname, '../src/images'),
'@styles': join(__dirname, '../src/styles'),
'@components': join(__dirname, '../src/components'),
};
const experiments = {
backCompat: false,
};
const rules = [
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/,
},
{
test: /\.(?:ico|gif|png|jpg|jpeg|svg)$/i,
type: 'javascript/auto',
loader: 'file-loader',
options: {
publicPath: '../',
name: '[path][name].[ext]',
context: path.resolve(__dirname, 'src/assets'),
emitFile: false,
},
},
{
test: /\.(woff(2)?|eot|ttf|otf|svg|)$/,
type: 'javascript/auto',
exclude: /images/,
loader: 'file-loader',
options: {
publicPath: '../',
context: path.resolve(__dirname, 'src/assets'),
name: '[path][name].[ext]',
emitFile: false,
},
},
{
test: /miniscript.*\.wasm$/,
type: 'webassembly/sync',
},
];
const devRules = [
...rules,
{
test: /\.scss$/,
use: [
// We're in dev and want HMR, SCSS is handled in JS
// In production, we want our css as files
'style-loader',
'css-loader',
{
loader: 'postcss-loader',
options: {
postcssOptions: {
plugins: [['postcss-preset-env']],
},
},
},
'sass-loader',
],
},
];
const prodRules = [
...rules,
{
test: /\.scss$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
{
loader: 'postcss-loader',
options: {
postcssOptions: {
plugins: [['postcss-preset-env']],
},
},
},
'sass-loader',
],
},
];
const devPlugins = [
new HtmlWebpackPlugin({
template: './src/index.html',
inject: true,
minify: false,
}),
new CopyPlugin(copyPluginPatterns),
];
const prodPlugins = [
new CleanWebpackPlugin(),
new CopyPlugin(copyPluginPatterns),
new MiniCssExtractPlugin({ filename: scssConfig.destFileName }),
new HtmlWebpackPlugin({
template: './src/index.html',
inject: true,
minify: false,
}),
];
const resolveFallback = {
'process/browser': require.resolve('process/browser'),
};
module.exports = {
aliasItems,
copyPluginPatterns,
devServer,
entryConfig,
experiments,
outputConfig,
scssConfig,
terserPluginConfig,
devRules,
prodRules,
devPlugins,
prodPlugins,
resolveFallback,
};
Выполнить команду
Для локальной разработки. Не используйте в интернете!