Laravel 混合版本特定文件
Laravel mix version a specific file
我正在尝试对特定文件进行版本控制。
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
class's source code of the laravel-mix package 后,我了解到无法仅对 mix-manifest.json
文件中存在的某些文件进行版本控制(即您在 [=17] 中提到的文件=]).
version()
方法无论如何都会对所有文件进行版本控制。作为参数的可选数组仅指示除了 mix-manifest.json
.
中提到的所有文件之外是否还有更多文件要版本化
在您的情况下,mix.version(['public/js/app.js']);
行首先对所有文件进行版本控制,然后查找位于 public/js/app.js
的文件。但它不存在,因为它已经被版本化并且 public/js
中的文件被命名为 [file-name].[hash].js
。这就是您收到此错误的原因:
Error: ENOENT: no such file or directory, open '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
将被版本控制。
我正在尝试对特定文件进行版本控制。
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
class's source code of the laravel-mix package 后,我了解到无法仅对 mix-manifest.json
文件中存在的某些文件进行版本控制(即您在 [=17] 中提到的文件=]).
version()
方法无论如何都会对所有文件进行版本控制。作为参数的可选数组仅指示除了 mix-manifest.json
.
在您的情况下,mix.version(['public/js/app.js']);
行首先对所有文件进行版本控制,然后查找位于 public/js/app.js
的文件。但它不存在,因为它已经被版本化并且 public/js
中的文件被命名为 [file-name].[hash].js
。这就是您收到此错误的原因:
Error: ENOENT: no such file or directory, open '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
将被版本控制。