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.csspublic/js/app.jsresources/assets/js/bootstrap.js 将被版本控制。