Поскольку вы используете 'widget.[contenthash].js'
содержимое га sh, и оно будет меняться при каждом изменении содержимого файла, поэтому вы не можете связать файл с пользователем
Вместо этого можно использовать contenthash
вы могли бы сделать что-то вроде этого
{
output {
filename: `widget.${someUserSpecificId}.js`
...
...
}
}
Теперь вопрос в том, как вы сможете передать someUserSpecificId
в конфигурации. Для этого вы можете использовать environment-options Webpack
теперь в конфигурации webpack, если вы экспортируете функцию вместо объекта, подобного этому
function (env, arg) {
return {
...
...
output: {
filename: `widget.${env.someUserSpecificId}.js`
...
...
}
}
, и теперь вы можете передать env.someUserSpecificId
с опцией cli, такой как
webpack --env.someUserSpecificId=foo
, теперь вы можете обновить любой пакет для любого пользователя, как вам нравится
ПРИМЕЧАНИЕ Имейте в виду, что вы не используете фактический идентификатор пользователя в имени файла, потому что он будет предоставлен клиенту, вместо этого создайте некоторый случайный идентификатор для каждого пользователя, который можно показывать на клиенте и уникальный для каждого пользователя
UPDATE метод выше Описанное полезно для обновления некоторого указанного c пакета, но если вы хотите обновить весь пакет в одном go, вам нужно немного настроить логи c
вместо передачи someUserSpecificId
из аргумент командной строки вы можете сделать это
const usersIdArray = ['userId1', 'userId2', ...otherUsersId];
const webpackConfig = userIdArray.map(someUserSpecificId => {
return {
...
...
output: {
filename: `widget.${someUserSpecificId}.js`
...
...
}
};
});
module.exports = webpackConfig;
то, что он сделает, это даст вам массив с несколькими конфигурациями webpack, и вы можете передать этот массив непосредственно в webpack, и webpack обновит все файлы согласно ng к соответствующей конфигурации см. экспорт нескольких конфигураций
Примечание , если у вас очень большой массив пользователей, пожалуйста, пакетируйте свою задачу в небольшом сегменте
Другая идея оптимизации , поскольку вы запускаете эту задачу на своем сервере, было бы неплохо подумать о какой-то оптимизации, чтобы уменьшить количество повторяющихся задач. Одна из идей, которые у меня есть сейчас, заключается в том, что вы можете собирать пакеты из двух частей 1. будет содержать пользовательские данные c config 2. будет содержать ваш код
, поэтому, если пользователь изменит свою конфигурацию, вы должны собрать только эту часть, а если вы измените свою конфигурацию, то вы также должны собрать ее только один раз, потому что ваш общий код будет таким же для всех пользователей (например, тема)
и при создании окончательного пакета просто объедините пользовательскую c конфигурацию с вашим кодом, чтобы уменьшить количество повторяющихся задач, и это будет намного быстрее