我正在尝试对特定文件进行版本化。
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
答案 0 :(得分:4)
我认为使用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
文件中存在的某些文件进行版本化(即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
将被版本化。