Laravel-Vite 将 scss 和 js 编译到单独的 public/asset 文件夹

Lou*_*lez 5 laravel laravel-blade vite laravel-vite

所以之前,用laravel MIX,在webpack.mix.js文件中,你可以这样写

mix.js('resources/js/app.js', 'public/js')
    .js('resources/js/header.js', 'public/js')
    .sass('resources/sass/app.scss', 'public/css')
    .sass('resources/sass/main.scss', 'public/css')
    .sass('resources/sass/header.scss', 'public/css')
Run Code Online (Sandbox Code Playgroud)

并将其public/asset单独编译。就像 JS 文件将被编译为public/asset/jssass 文件一样public/asset/css。当您将文件放入head视图blaze.php中时,您只需编写

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

<script type="text/javascript" src="{{ asset('js/app.js') }}"></script>
<script type="text/javascript" src="{{ asset('js/header.js') }}"></script>
Run Code Online (Sandbox Code Playgroud)

我如何将其与现在的 Laravel-Vite 结合起来?因为当我运行npm run dev单独的文件scssjs在一个文件夹中一起编译时,该文件夹是public/build/assets/. 他们没有区分js文件是否进入js文件夹和scss文件是否进入css文件夹。

这是我的样子vite.config.js

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';

export default defineConfig({
    plugins: [
        laravel({
            input: [
                'resources/sass/app.scss',
                'resources/sass/main.scss',
                'resources/js/app.js',
            ],
            refresh: true,
        }),
    ],
});
Run Code Online (Sandbox Code Playgroud)

Har*_*tel 0

在 laravel 9 中使用 scss 和 Vite

步骤 1:- 在 resources/sass 目录中创建 app.scss 文件

资源/sass/app.scss

// Variables
// @import 'variables';

/* The following line can be included in a src/App.scss */
@import "bootstrap/scss/bootstrap";

Run Code Online (Sandbox Code Playgroud)

vite.config.js步骤 2:- 然后对文件进行更改

vite.config.js

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import react from '@vitejs/plugin-react';

export default defineConfig({
    plugins: [
        laravel({
            // input: 'resources/js/app.jsx',
            input: [
                "resources/sass/app.scss", // scss file
                "resources/js/app.jsx"
            ],
            refresh: true,
        }),
        react(),
    ],
});


Run Code Online (Sandbox Code Playgroud)

第 3 步:- 在 Laravel Blade 文件中进行更改。就我而言,`resources/views/app.blade.php

资源/视图/app.blade.php

<head>
    <title>{{ config('app.name', 'Laravel') }}</title>

    <!-- Fonts -->
    <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap">

    <!-- Scripts -->
    // @vite(['resources/scss/app.scss', 'resources/js/app.jsx'])
    @vite(['resources/sass/app.scss', 'resources/js/app.jsx', "resources/js/Pages/{$page['component']}.jsx"])
</head>
...

Run Code Online (Sandbox Code Playgroud)

完毕。


现在根据您的问题,我了解您需要将构建资产保存为自定义路径,然后查看官方文档

根据文档,我们需要buildDirectory在 vite.config.js 文件中设置关键选项

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import react from '@vitejs/plugin-react';

export default defineConfig({
    plugins: [
        laravel({
            // input: 'resources/js/app.jsx',
            input: [
                "resources/sass/app.scss", // scss file
                "resources/js/app.jsx"
            ],
            buildDirectory: 'bundle', // Customize the build directory...
            refresh: true,
        }),
        react(),
    ],
});

Run Code Online (Sandbox Code Playgroud)

& laravel Blade 文件将如下所示


<head>
    <title>{{ config('app.name', 'Laravel') }}</title>

    <!-- Fonts -->
    <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap">

    <!-- Scripts -->
    {{Vite::useBuildDirectory('bundle')->withEntryPoints(['resources/sass/app.scss', 'resources/js/app.jsx', "resources/js/Pages/{$page['component']}.jsx"]); }}
</head>
...
Run Code Online (Sandbox Code Playgroud)

注意:-我们需要安装npm add --save-dev sass,否则我们会出错Preprocessor dependency "sass" not found. Did you install it?