【问题标题】:Laravel 8 JetStream Unable to locate Mix file: /css/app.css on npm run prodLaravel 8 JetStream 无法在 npm run prod 上找到混合文件:/css/app.css
【发布时间】:2021-08-13 10:52:31
【问题描述】:

我有一个使用 Inertia Js 和 VueJs 3 在 Jetstream 上运行的 Laravel 8 应用程序。

当我运行时:npm run prod

我收到此错误:

Exception
Unable to locate Mix file: /css/app.css. (View: /var/www/html/mysite/resources/views/app.blade.php)
http://subdomain.mysite.com/

更改后:

<link rel="stylesheet" href="{{ mix('css/app.css') }}">

<link rel="stylesheet" href="{{ asset('css/app.css') }}">

和:

<script src="{{ mix('js/app.js') }}" defer></script>

<script src="{{ asset('js/app.js') }}" defer></script>

效果很好。但这不是错的吗?用 mix 代替asset 有什么好处?

我也尝试过使用&lt;link rel="stylesheet" href="{{ asset(mix('css/app.css')) }}"&gt;,但它仍然无法正常工作。我收到同样的错误,说 mix 无法找到文件:/css/app.css

这是一个简单的 Laravel 应用,没有任何自定义。

我试图运行npm run prod,希望页面大小会更小,但我看到的页面大小与npm run watchnpm run dev (17Mb) 相同。

对于减小 VueJs Laravel 应用的页面大小有什么建议吗?

更新

webpack.mix.js 内容:

mix.js('resources/js/app.js', 'public/js').vue()
    .postCss('resources/css/app.css', 'public/css', [
        require('postcss-import'),
        tailwindcss('tailwind.config.js')
    ])
    .webpackConfig(require('./webpack.config'));

if (mix.inProduction()) {
    mix.version();
}

mix-manifest.json 内容:

{
    "/js/app.js": "/js/app.js",
    "/css/app.css": "/css/app.css"
}

【问题讨论】:

  • 您能否将webpack.mix.jspublic/mix-manifest.json 添加到问题中?
  • 我添加了请求的详细信息。
  • 我假设mix-manifest.json 反映了npm run devnpm run prod 应该显示资产的散列版本。使用散列版本时,您应该在视图中使用{{ mix('js/app.js') }}。包括前导斜线是否有区别,所以mix('/js/app.js')
  • 这个建议没有帮助:“是否包括前导斜杠会有所不同,所以 mix('/js/app.js')”。我仍然收到:无法找到混合文件:/css/app.css。我将暂时使用asset('css/app.css') 和asset('js/app.js'),因为它运行良好。
  • 我没有看到问题,但您没有发布 Tailwind 和 Webpack 配置文件或 package.json 文件。

标签: laravel vue.js npm laravel-mix inertiajs


【解决方案1】:

同样的问题

package.json

{
"private": true,
"scripts": {
    "dev": "npm run development",
    "development": "mix",
    "watch": "mix watch",
    "watch-poll": "mix watch -- --watch-options-poll=1000",
    "hot": "mix watch --hot",
    "prod": "npm run production",
    "production": "mix --production"
},
"devDependencies": {
    "@inertiajs/inertia": "^0.9.1",
    "@inertiajs/inertia-vue3": "^0.4.2",
    "@inertiajs/progress": "^0.2.5",
    "@tailwindcss/forms": "^0.2.1",
    "@tailwindcss/typography": "^0.3.0",
    "@vue/compiler-sfc": "^3.0.5",
    "axios": "^0.21",
    "browser-sync": "^2.27.4",
    "browser-sync-webpack-plugin": "^2.3.0",
    "laravel-mix": "^6.0.6",
    "lodash": "^4.17.19",
    "postcss": "^8.1.14",
    "postcss-custom-properties": "^11.0.0",
    "postcss-import": "^12.0.1",
    "tailwindcss": "^2.0.1",
    "vue": "^3.0.5",
    "vue-loader": "^16.1.2"
}

}

webpack.mix.js

const mix = require('laravel-mix');

/*
 |--------------------------------------------------------------------------
 | Mix Asset Management
 |--------------------------------------------------------------------------
 |
 | Mix provides a clean, fluent API for defining some Webpack build steps
 | for your Laravel applications. By default, we are compiling the CSS
 | file for the application as well as bundling up all the JS files.
 |
 */

mix.js('resources/js/app.js', 'public/js').vue()
    .postCss('resources/css/app.css', 'public/css', [
        require('postcss-import'),
        require('tailwindcss'),
    ])
    .webpackConfig(require('./webpack.config'));

if (mix.inProduction()) {
    mix.version();
}

混合清单.json

{
    "/js/app.js": "/js/app.js?id=e7a1435098757644f9cd"
}

npm run prod/dev 没有区别。 css 文件在 publics/css 中生成,但不包含在 mix-manifest 中。

【讨论】:

  • 与 postcss 没有区别": "^8.3.6" & "laravel-mix": "^6.0.25",
  • 我必须纠正。根本没有创建css文件。
  • 我认为它与指向我的 www 目录的符号链接有关。我将项目放在带有 ubuntu 的保护程序上,并且相同的配置在那里构建 app.css。比我将本地开发目录移动到非符号链接目录(Windows),它也可以在那里工作。
猜你喜欢
  • 2022-08-24
  • 2021-01-01
  • 2020-10-01
  • 2021-10-08
  • 2020-08-10
  • 2021-06-16
  • 2021-02-27
  • 2022-10-13
  • 2021-10-24
相关资源
最近更新 更多