Вместо этого я бы использовал дуплексный поток. как документировано здесь nodejs doc дуплексные потоки
A Transform stream - это дуплексный поток, где вывод каким-то образом вычисляется с входа.
blockquote >
Я полагаю, что единственный способ вызвать перезагрузку в css - это изменить версию в URL-адресе импорта, как вы упомянули в своем вопросе.
Не уверен, поможет ли это, но , используя php и apache, вы можете использовать filemtime()
вместе с правилами перезаписи для автоматического обновления имени версии css всякий раз, когда в файл вносятся изменения.
Вот пример:
// Pass in the url path to the file '/frontend/css/main.css' for example
function css_auto_version($file) {
// Return $file if the path is faulty to prevent errors.
if(strpos($file, '/') !== 0 || !file_exists( Я полагаю, что единственный способ вызвать перезагрузку в css - это изменить версию в URL-адресе импорта, как вы упомянули в своем вопросе.
Не уверен, поможет ли это, но , используя php и apache, вы можете использовать filemtime()
вместе с правилами перезаписи для автоматического обновления имени версии css всякий раз, когда в файл вносятся изменения.
Вот пример:
[110] Затем в вашем файле .htaccess для корня документа вам нужно добавить следующее:
RewriteEngine on
RewriteRule ^(.*)\.[\d]{10}\.(css)$ $1.$2 [L]
Это правило переписывания в основном говорит apache вместо этого ищет /frontend/css/main.TIMESTAMP.css в /frontend/css/main.css.
Теперь вы можете использовать эту функцию в своем php-шаблоне, как этот echo css_auto_version('/frontend/css/main.css');
, и имя файла в пути всегда будет содержать метку времени последнего изменения файла. Любой браузер с более старой версией кэшированного файла поверит, что это совершенно другой файл, и перезагрузит его с сервера. Правило перезаписи удалит отметку времени в запросах и позволит серверу найти правильный файл CSS и отправить его обратно в браузер.
Поскольку вы не можете использовать php внутри css-файла, вам, вероятно, придется включить правила @import
в тег style
в HTML и включить туда php.
Вы можете узнать больше о filemtime
здесь https://www.w3schools.com/php/func_filesystem_filemtime.asp
Если вы действительно хотите просто всегда принудительно перезагружать, Независимо от того, изменился ли файл на самом деле, я бы предложил установить в ответе заголовки http как no-cache. Вы можете прочитать больше об этом здесь:
HTTP Cache-control https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control [ 1120]
PHP header () https://www.w3schools.com/php/func_http_header.asp
Надеюсь, это поможет!
SERVER['DOCUMENT_ROOT'] . $file))
return $file;
// filemtime() returns a timestamp showing the last time the file was changed.
$mtime = filemtime( Я полагаю, что единственный способ вызвать перезагрузку в css - это изменить версию в URL-адресе импорта, как вы упомянули в своем вопросе.
Не уверен, поможет ли это, но , используя php и apache, вы можете использовать filemtime()
вместе с правилами перезаписи для автоматического обновления имени версии css всякий раз, когда в файл вносятся изменения.
Вот пример:
[110] Затем в вашем файле .htaccess для корня документа вам нужно добавить следующее:
RewriteEngine on
RewriteRule ^(.*)\.[\d]{10}\.(css)$ $1.$2 [L]
Это правило переписывания в основном говорит apache вместо этого ищет /frontend/css/main.TIMESTAMP.css в /frontend/css/main.css.
Теперь вы можете использовать эту функцию в своем php-шаблоне, как этот echo css_auto_version('/frontend/css/main.css');
, и имя файла в пути всегда будет содержать метку времени последнего изменения файла. Любой браузер с более старой версией кэшированного файла поверит, что это совершенно другой файл, и перезагрузит его с сервера. Правило перезаписи удалит отметку времени в запросах и позволит серверу найти правильный файл CSS и отправить его обратно в браузер.
Поскольку вы не можете использовать php внутри css-файла, вам, вероятно, придется включить правила @import
в тег style
в HTML и включить туда php.
Вы можете узнать больше о filemtime
здесь https://www.w3schools.com/php/func_filesystem_filemtime.asp
Если вы действительно хотите просто всегда принудительно перезагружать, Независимо от того, изменился ли файл на самом деле, я бы предложил установить в ответе заголовки http как no-cache. Вы можете прочитать больше об этом здесь:
HTTP Cache-control https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control [ 1120]
PHP header () https://www.w3schools.com/php/func_http_header.asp
Надеюсь, это поможет!
SERVER['DOCUMENT_ROOT'] . $file);
// return '/frontend/css/main.TIMESTAMP.css'
return preg_replace('{\\.([^./]+)$}', ".$mtime.\$1", $file);
}
Затем в вашем файле .htaccess для корня документа вам нужно добавить следующее:
RewriteEngine on
RewriteRule ^(.*)\.[\d]{10}\.(css)$ $1.$2 [L]
Это правило переписывания в основном говорит apache вместо этого ищет /frontend/css/main.TIMESTAMP.css в /frontend/css/main.css.
Теперь вы можете использовать эту функцию в своем php-шаблоне, как этот echo css_auto_version('/frontend/css/main.css');
, и имя файла в пути всегда будет содержать метку времени последнего изменения файла. Любой браузер с более старой версией кэшированного файла поверит, что это совершенно другой файл, и перезагрузит его с сервера. Правило перезаписи удалит отметку времени в запросах и позволит серверу найти правильный файл CSS и отправить его обратно в браузер.
Поскольку вы не можете использовать php внутри css-файла, вам, вероятно, придется включить правила @import
в тег style
в HTML и включить туда php.
Вы можете узнать больше о filemtime
здесь https://www.w3schools.com/php/func_filesystem_filemtime.asp
Если вы действительно хотите просто всегда принудительно перезагружать, Независимо от того, изменился ли файл на самом деле, я бы предложил установить в ответе заголовки http как no-cache. Вы можете прочитать больше об этом здесь:
HTTP Cache-control https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control [ 1120]
PHP header () https://www.w3schools.com/php/func_http_header.asp
Надеюсь, это поможет!