Изолировать определенные файлы конфигурации из основного комплекта - PullRequest
0 голосов
/ 18 января 2019

У меня есть несколько файлов конфигурации в моем приложении, которые находятся в отдельном пакете или вообще не упакованы, но скопированы в выходную папку и каким-то образом прочитаны основным пакетом.

I 'Мне удалось поместить мои файлы в отдельный пакет конфигурации, но проблема в том, что эти файлы также все еще связаны в основной пакет, что фактически делает мой пакет конфигурации бесполезным.

Мне удалось заставить пакет конфигурации работать с помощью @Chase, но я еще не доволен.Далее я хочу узнать, как эти файлы вообще не связываются, но по-прежнему доступны для основного комплекта после развертывания.

ЛЮБЫЕ ПРЕДЛОЖЕНИЯ?

Структура папок / файлов моего проекта (необходимые биты)):

- app
  - js
    - components
      - [all of my components]
    - config
      - [my config files that I want to isolate]
    - App.jsx
    - index.jsx
    - ...
  - ...

Моя конфигурация веб-пакета:

const path = require('path')
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const cwd = process.cwd()
const mode = 'production'
const CleanWebpackPlugin = require('clean-webpack-plugin');

module.exports = {
  context: path.join(cwd, 'app'),
  mode,

  optimization: {
    runtimeChunk: 'single',
    minimize: false,
    splitChunks: {
      chunks: 'all',
      maxInitialRequests: Infinity,
      minSize: 0,
      cacheGroups: {
        config: {
          test: /[\\/]app[\\/]js[\\/]config[\\/]/,
          minSize: 0
        },
        vendors: {
          test: /[\\/]node_modules[\\/]/,
          name(module) {
            // get the name. E.g. node_modules/packageName/not/this/part.js
            // or node_modules/packageName
            const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];

            // npm package names are URL-safe, but some servers don't like @ symbols
            return `npm.${packageName.replace('@', '')}`;
          },
        }
      },
    },
  },

  entry: {
    app: ["babel-polyfill", './js/index.jsx'],
    silentRenew: ["./silent_renew/silent_renew.js"],
  },

  output: {
    path: path.resolve('dist'),
    filename: 'bundle_[name].js'
  },

  module: {
    rules: [{
      test: /\.jsx?$/,
      use: ['babel-loader'],
      exclude: /node_modules/
    },
    {
      test: /\.json$/,
      use: ['json-loader'],
      exclude: /node_modules/
    },
    {
      test: /\.css$/,
      use: [
        'style-loader',
        'css-loader'
      ]
    },
    {
      test: /\.less$/,
      use: [
        'style-loader',
        'css-loader',
        'less-loader'
      ]
    },
    {
      test: /\.scss$/,
      use: [
        'style-loader',
        'css-loader',
        'scss-loader'
      ]
    },
    {
      test: /\.(png|jpg|jpeg|svg|gif)$/,
      use: [
        'file-loader'
      ]
    },
    {
      test: /\.(woff|woff2|eot|ttf|otf)$/,
      use: [
        'file-loader'
      ]
    },
    {
      test: /\.(pptx|zip)$/,
      loader: "file-loader",
      options: {
        name: '[name].[ext]'
      }
    }]
  },

  plugins: [
    new CleanWebpackPlugin(['dist']),
    new HtmlWebpackPlugin({
      template: './index.ejs',
      excludeChunks: ["silentRenew"],
    }),
    new HtmlWebpackPlugin({
      template: "./silent_renew/silent_renew.html",
      chunks: ["silentRenew",],
      filename: "silent_renew.html"
    }),
    new webpack.DefinePlugin({
      CONSTANTS: {
        PROD: false,
        TEST: true,
        DEV: false
      }
    }),
    new webpack.IgnorePlugin(/^(fs|ipc|ignore)$/)
  ]
}

Я хочу, чтобы мои файлы конфигурации были включены в комплект конфигурации, это уже работает.Но тогда мне также нужно, чтобы они не были включены в основной комплект.

Еще лучше было бы, если бы у меня могли быть файлы конфигурации, не связанные вообще, а просто скопированные в выходную папку и прочитанные оттуда основным (приложением) комплектом. Но изолированный конфиг - это второй вариант.

1 Ответ

0 голосов
/ 18 января 2019

Вы должны разделить ваш пакет на основании условий.Это пример разбиения node_modules на «общий» комплект, но вы можете переписать свойство test в соответствии с условиями вашего каталога.

    optimization: {
    splitChunks: {
      cacheGroups: {
        commons: {
          test: /[\\/]node_modules[\\/]/,
          name: "common",
          chunks: "all"
        }
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...