Files
react_task_2/config/webpack.base.js
T
2022-11-26 01:23:44 -05:00

156 lines
5.0 KiB
JavaScript

const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ESLintPlugin = require('eslint-webpack-plugin');
const Dotenv = require('dotenv-webpack');
const path = require('path');
const paths = require('./paths');
const envPath = require('./envPath');
module.exports = {
// Where webpack looks to start building the bundle
entry: [path.normalize(`${paths.src}/index.tsx`)],
// Where webpack outputs the assets and bundles
output: {
path: path.normalize(paths.build),
filename: '[name].bundle.js',
publicPath: '/',
},
// Customize the webpack build process
plugins: [
// Removes/cleans build folders and unused assets when rebuilding
new CleanWebpackPlugin(),
// Puts variables in .env files into process.env
new Dotenv({
path: path.normalize(envPath),
}),
new CopyWebpackPlugin({
patterns: [
{
from: path.normalize(`${paths.src}/netlify-redirect`),
to: path.normalize(paths.build),
globOptions: {
ignore: ['*.DS_Store'],
},
noErrorOnMissing: true,
},
{
from: './node_modules/@pdftron/webviewer/public',
to: path.normalize(`${paths.build}/public/webviewer`),
globOptions: {
ignore: ['*.DS_Store'],
},
},
],
}),
// Generates an HTML file from a template
new HtmlWebpackPlugin({
title: 'Company',
inject: 'body',
appMountId: 'app',
favicon: paths.src + '/images/favicon.png',
template: `${paths.src}/index.html`, // template file
filename: 'index.html', // output file
// ', //Lets us load the appropriate dev scripts in the html
axios: 'https://cdn.jsdelivr.net/npm/axios@0.21.1/dist/axios.min.js',
bootstrap: 'https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.min.js',
bootStrapCss: 'https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css',
react: 'https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js',
reactDom: 'https://cdn.jsdelivr.net/npm/react-dom@17.0.2/index.min.js', // Lets us load the appropriate dev scripts in the html
popper: 'https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/cjs/popper.min.js',
redux: 'https://cdn.jsdelivr.net/npm/redux@4.1.0/lib/redux.min.js',
reactRedux: 'https://cdn.jsdelivr.net/npm/react-redux@7.2.4/lib/index.min.js',
reactRouterDom: 'https://cdn.jsdelivr.net/npm/react-router-dom@5.2.0/index.min.js',
}),
// ESLint configuration
new ESLintPlugin({
files: ['.', 'src', 'config'],
formatter: 'table',
failOnError: false,
emitWarning: true,
}),
// Prettier configuration
// new PrettierPlugin(),
],
resolve: {
alias: {
RocketAssets: `${paths.src}/shared/assets`,
Components: path.normalize(`${paths.src}/shared/components`),
Containers: path.normalize(`${paths.src}/shared/containers`),
Context: path.normalize(`${paths.src}/shared/context`),
HOC: path.normalize(`${paths.src}/shared/hoc`),
Utils: path.normalize(`${paths.src}/shared/utils`),
Hooks: path.normalize(`${paths.src}/shared/hooks`),
Themes: path.normalize(`${paths.src}/shared/themes`),
Routes: path.normalize(`${paths.src}/routes`),
},
symlinks: false,
cacheWithContext: false,
extensions: ['.ts', '.tsx', '.js', '.json', '.jsx', '.mjs', '.css', '.scss', '.sass'],
},
// Determine how modules within the project are treated
module: {
rules: [
// JavaScript: Use Babel to transpile JavaScript files
{
test: /\.(js|jsx|tsx|ts|mjs)$/,
exclude: /(node_modules|bower_components)/,
loader: 'babel-loader',
},
{
test: /\.(ts|tsx)$/,
use: [
{
loader: 'ts-loader',
},
],
},
{
test: /\.svg$/,
use: ['@svgr/webpack'],
},
{
test: /\.(?:ico|png|jpg|gif|jpeg|ttf)$/,
type: 'assets/resource',
},
// Images: Copy image files to build folder
{ test: /\.(?:ico|gif|png|jpg|jpeg)$/i, type: 'assets' },
// Fonts and SVGs: Inline files
// { test: /\.(woff(2)?|eot|ttf|otf|svg|)$/, type: 'assets/inline' },
],
},
// externals: {
// axios: {
// amd: 'axios',
// },
// bootstrap: 'bootstrap',
// react: 'React', // Case matters here
// 'react-dom': 'ReactDOM',
// 'react-router-dom': 'react-router-dom',
// popperCore: {
// root: 'PopperJS',
// commonjs2: 'popper.js',
// commonjs: 'popper.js',
// amd: 'popper.js',
// },
// 'react-router-dom': 'ReactRouter',
// redux: 'redux',
// 'react-redux': 'react-redux',
// },
// externalsPresets: { web: false, webAsync: true },
// optimization: {
// // fix node modules not packaged into zip
// concatenateModules: false,
// },
};