Я пытаюсь создать версию определенного файла.
mix.js('resources/assets/js/app.js', 'public/js')
.sass('resources/assets/sass/app.scss', 'public/css')
.babel([
'resources/assets/js/libs/xxxx.js',
'resources/assets/js/libs/xxxx.js',
'resources/assets/js/libs/xxxx.js',
'resources/assets/js/libs/xxxx.js',
'resources/assets/js/libs/xxxx.js',
'resources/assets/js/libs/xxxx.js',
'resources/assets/js/libs/xxxx.js',
'resources/assets/js/libs/xxxx.js',
'resources/assets/js/libs/xxxx.js',
'resources/assets/js/libs/xxxx.js',
'resources/assets/js/libs/xxxx.js',
'resources/assets/js/libs/xxxx.js'
], 'public/js/libs.js')
.scripts('resources/assets/js/pages/xxxx.js', 'public/js/xxxx.js')
.scripts('resources/assets/js/pages/xxxx.js', 'public/js/xxxx.js')
.scripts('resources/assets/js/pages/xxxx.js', 'public/js/xxxx.js')
.scripts('resources/assets/js/pages/xxxx.js', 'public/js/xxxx.js')
.scripts('resources/assets/js/pages/xxxx.js', 'public/js/xxxx.js')
.scripts('resources/assets/js/pages/xxxx.js', 'public/js/xxxx.js')
.scripts('resources/assets/js/pages/xxxx.js', 'public/js/xxxx.js')
.scripts('resources/assets/js/pages/xxxx.js', 'public/js/xxxx.js')
.version([
'public/js/app.js'
]);
Я пытаюсь версии app.js, но я получаю сообщение об ошибке:
Ошибка: ENOENT: нет такого файла или каталога, откройте «public / js / app.js»
Я также попробовал: app.*.js
Я думаю, что это немного грязно и менее читабельно, чтобы связывать методы таким образом с Laravel Mix. Если вы просто хотите версии файла app.js
Вы могли бы изолировать это.
После некоторых испытаний я заметил, что public/
необязательно в начале пути вывода.
Попробуйте что-то вроде этого:
mix.sass('resources/assets/sass/app.scss', 'css/app.css');
mix.js('resources/assets/js/app.js', 'js/app.js');
mix.babel([
'resources/assets/js/libs/xxxx.js',
'resources/assets/js/libs/xxxx.js',
'resources/assets/js/libs/xxxx.js',
'resources/assets/js/libs/xxxx.js'
], 'js/libs.js');
mix.scripts('resources/assets/js/pages/xxxx.js', 'js/xxxx.js')
.scripts('resources/assets/js/pages/xxxx.js', 'js/xxxx.js')
.scripts('resources/assets/js/pages/xxxx.js', 'js/xxxx.js')
.scripts('resources/assets/js/pages/xxxx.js', 'js/xxxx.js');
mix.version(['public/js/app.js']);
Надеюсь это поможет.
Редактировать:
TL; DR: version()
Метод версии всех файлов, независимо от того, что.
Посмотрев на Versioning
исходный код класса пакета laravel-mix Я понял, что невозможно версий только определенных файлов, которые присутствуют в mix-manifest.json
файл (то есть файлы, которые вы упомянули в вашем webpack.mix.js
).
version()
Метод версии всех файлов, независимо от того, что. Необязательный массив в качестве аргумента только указывает, есть ли еще файлы для версии в дополнение ко всем файлам, упомянутым в mix-manifest.json
,
В вашем случае mix.version(['public/js/app.js']);
Во-первых, строка проверяет все файлы, а во-вторых ищет файл, расположенный по адресу public/js/app.js
, Но он не существует, так как он уже был версионирован и файлы в public/js
названы [file-name].[hash].js
, Вот почему вы получаете эту ошибку:
Ошибка: ENOENT: нет такого файла или каталога, откройте «public / js / app.js»
Например, если ваш webpack.mix.js
выглядит так:
mix.sass('resources/assets/sass/app.scss', 'public/css');
mix.js('resources/assets/js/app.js', 'public/js');
mix.version(['resources/assets/js/bootstrap.js']);
Тогда файлы public/css/app.css
, public/js/app.js
а также resources/assets/js/bootstrap.js
будет версионным.
Других решений пока нет …