Как я могу получить веб-пакет для вывода его в двух местах? - PullRequest
3 голосов
/ 28 февраля 2020

Моя текущая конфигурация выглядит следующим образом:

output: {
  filename: 'bundle.js',
  path: OUT_DIR
},

Однако мне нужны пакеты. js до go для двух каталогов?

Могу ли я выполнить sh просто Передача массива каталогов в путь?

Или мне нужно сделать что-то более сложное?

В настоящее время у меня есть bash скрипт cpll, который я должен вводить вручную после каждого построить, и это утомительно.

Надеемся, веб-пакет имеет опцию конфигурации для отправки выходных данных в двух или более местах.

Исследования

google search

Этот вопрос ТАК 4 года и не имеет того, что я ищу - , поэтому

В документации не упоминается способ сделайте это здесь - webpack .

Если нет опции конфигурации, как я могу выполнить команду bash автоматически?

Я попытался передать ему массив строк вместо строки, и он вылетел с явной ошибкой:

Неверный объект конфигурации. Webpack был инициализирован с использованием объекта конфигурации, который не соответствует схеме API. - configuration.output.path должен быть строкой.

Передача массива не будет работать. Хммм.

Попытка другого подхода, начиная с Google - search

Приводит возможное решение - так

по запросу - полный экспортFun c

const exportFunc = ( env ) => {
  console.log('webpack.config.js-exportFunc', OUT_DIR);
  return {
    entry: `${IN_DIR}/index.jsx`,
    output: {
      filename: 'bundle.js',
      path: '/Users/c/_top/ll-front/dist'
    },
    module: {
      rules: [
        {
          test: /\.css$/,
          use: [ 'style-loader', 'css-loader' ]
        },
        {
          test: /\.jsx?/,
          include: IN_DIR,
          use: {
            loader: 'babel-loader',
            options: {
              presets: ['@babel/preset-env', '@babel/preset-react'],
              plugins: ['@babel/plugin-proposal-object-rest-spread', '@babel/plugin-proposal-class-properties'],
            }
          }
        }
      ]
    }
  };
};

module.exports = exportFunc;

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Вы можете использовать режим мультикомпиляции webpack , экспортируя массив конфигураций.

Как в документации:

Вместо экспорта одной конфигурации объект / функция, вы можете экспортировать несколько конфигураций (начиная с версии 3.1.0 поддерживается несколько функций). При запуске веб-пакета все конфигурации собраны.

Например:

const config = {
  // your webpack config
}

const outputPaths = ["path/one", "path/two"]

module.exports = outputPaths.map(outputPath => {
  return {
    ...config,
    name: outputPath,
    output: {
      ...config.output,
      path: path.resolve(__dirname, outputPath)
    }
  }
})

Поскольку вы используете конфигурацию функции, вы можете сделать что-то вроде этого:

const outputPaths = ["path/one", "path/two"]

module.exports = outputPaths.map(outputPath => {
  return env => {
    return {
      entry: `${IN_DIR}/index.jsx`,
      output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, outputPath)
      },
      module: {
        rules: [
          {
            test: /\.css$/,
            use: [ 'style-loader', 'css-loader' ]
          },
          {
            test: /\.jsx?/,
            include: IN_DIR,
            use: {
              loader: 'babel-loader',
              options: {
                presets: ['@babel/preset-env', '@babel/preset-react'],
                plugins: ['@babel/plugin-proposal-object-rest-spread', '@babel/plugin-proposal-class-properties'],
              }
            }
          }
        ]
      }
    };
  }
})
0 голосов
/ 28 февраля 2020

Вместо этого вы можете использовать несколько конфигураций. Вот ссылка на документацию веб-пакета .

Чтобы избежать дублирования кода, рассматривайте текущую конфигурацию как объект. Затем продублируйте этот объект и переопределите секцию вывода дублированного объекта. Наконец поместите оба объекта в массив. Используйте этот массив в качестве новой конфигурации.

var yourCurrentConfig = {...};

var secondaryDestinationConfig = Object.assign(yourCurrentConfig, {
    output: {
        path: {
            filename: 'bundle.js',
            path: SECONDARY_DIR
        } 
    }
});

var newConfig = [
   yourCurrentConfig, secondaryDestinationConfig
];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...