cshs-8.x-1.x-dev/frontend/webpack.config.common.js

frontend/webpack.config.common.js
const { resolve } = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

function getDirectories() {
  const appRoot = __dirname;
  const src = `${appRoot}/src`;
  const repoRoot = resolve(appRoot, '..');
  const artifacts = `${repoRoot}/artifacts`;
  const dist = `${repoRoot}/build`;

  return Object.freeze({
    repoRoot,
    appRoot,
    dist,
    src,
    artifacts,
  });
}

/**
 * @type {{src: string, repoRoot: string, dist: string, appRoot: string, artifacts: string}}
 */
const directories = getDirectories();

/**
 * @type {string[]}
 */
const extensions = [
  '.js',
  '.ts',
];

/**
 * @type {string[]}
 */
const entrypoints = [
  'cshs',
  'jquery.simpler-select',
];

/**
 * @param {('development'|'test'|'production')} mode
 * @param {string} devtool
 * @param {Object[]} [plugins]
 *
 * @return {Object}
 */
function configure(mode, devtool, plugins = []) {
  process.env.NODE_ENV = mode;

  plugins.unshift(
    new MiniCssExtractPlugin({
      filename: '[name].css',
    }),
  );

  return {
    mode,
    plugins,
    devtool,
    target: ['web', 'es5'],
    entry: entrypoints.reduce((accumulator, name) => {
      accumulator[name] = `${directories.src}/${name}.ts`;

      return accumulator;
    }, {}),
    resolve: {
      extensions,
    },
    output: {
      path: directories.dist,
      filename: '[name].js',
    },
    optimization: {
      minimize: false,
    },
    module: {
      rules: [
        {
          test: /\.[t|j]s$/,
          use: ['babel-loader', 'ts-loader'],
          exclude: /node_modules/,
        },
        {
          test: /\.s?css$/,
          use: [
            MiniCssExtractPlugin.loader,
            {
              loader: 'css-loader',
              options: {
                importLoaders: 1,
              },
            },
            {
              loader: 'postcss-loader',
              options: {
                postcssOptions: {
                  plugins: [
                    require('autoprefixer'),
                    require('postcss-nested'),
                    require('postcss-css-variables'),
                    // This plugin must go after the "css-variables".
                    require('postcss-calc'),
                    require('cssnano'),
                  ],
                },
              },
            },
          ],
        },
      ],
    },
  };
}

module.exports = {
  directories,
  extensions,
  configure,
};

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc