Laravel mix版本是一个特定的文件

时间:2017-04-30 01:18:26

标签: php laravel webpack laravel-mix

我正在尝试对特定文件进行版本化。

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

1 个答案:

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