1

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

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

4

1 回答 1

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了 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.csspublic/js/app.js并且resources/assets/js/bootstrap.js将被版本化。

于 2017-04-30T10:06:13.440 回答