You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Railway.app部署Laravel/Vue项目遇Vite路径解析错误求助

Laravel/Vue(Vite)应用Railway.app部署构建失败:路径解析RollupError

我尝试在Railway.app平台部署基于Vite的Laravel/Vue应用,本地执行npm run build(包括全新克隆仓库后构建)均正常,但平台构建时出现路径解析错误导致失败。错误信息显示无法从resources/js/router/index.js中解析../pages/SignIn.vue,具体为RollupError。以下是相关配置代码、文件结构与错误日志:

错误日志

#15 [11/12] RUN  npm run build


#15 0.329

#15 0.329 > build
#15 0.329 > vite build --base=/
#15 0.329


#15 0.654 vite v5.0.12 building for production...


#15 0.709 transforming...


#15 1.023 ✓ 30 modules transformed.


#15 1.023 Could not resolve "../pages/SignIn.vue" from "resources/js/router/index.js"
#15 1.023 file: /app/resources/js/router/index.js
#15 1.025 error during build:
#15 1.025 RollupError: Could not resolve "../pages/SignIn.vue" from "resources/js/router/index.js"
#15 1.025     at error (file:///app/node_modules/rollup/dist/es/shared/parseAst.js:337:30)
#15 1.025     at ModuleLoader.handleInvalidResolvedId (file:///app/node_modules/rollup/dist/es/shared/node-entry.js:18022:24)
#15 1.025     at file:///app/node_modules/rollup/dist/es/shared/node-entry.js:17982:26
#15 ERROR: process "/bin/bash -ol pipefail -c npm run build" did not complete successfully: exit code: 1
-----

> [11/12] RUN  npm run build:
0.654 vite v5.0.12 building for production...
0.709 transforming...
1.023 ✓ 30 modules transformed.
1.023 Could not resolve "../pages/SignIn.vue" from "resources/js/router/index.js"
1.023 file: /app/resources/js/router/index.js
1.025 error during build:
1.025 RollupError: Could not resolve "../pages/SignIn.vue" from "resources/js/router/index.js"
1.025     at error (file:///app/node_modules/rollup/dist/es/shared/parseAst.js:337:30)
1.025     at ModuleLoader.handleInvalidResolvedId (file:///app/node_modules/rollup/dist/es/shared/node-entry.js:18022:24)


1.025     at file:///app/node_modules/rollup/dist/es/shared/node-entry.js:17982:26
-----


Dockerfile:25
-------------------
23 |     # build phase
24 |     COPY . /app/.
25 | >>> RUN  npm run build
26 |
27 |
-------------------
ERROR: failed to solve: process "/bin/bash -ol pipefail -c npm run build" did not complete successfully: exit code: 1


Error: Docker build failed

Vite配置文件

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

import path from 'path';

export default defineConfig({
    plugins: [
        laravel({
            input: ['resources/css/app.css', 'resources/js/app.js', 'resources/css/bootstrap.min.css'],
            refresh: true,
        }),
        vue({
            template: {
                compilerOptions: {
                  isCustomElement: (tag) => tag.startsWith('Navigation')
                }
            }
        }),
        vuetify({
            autoImport: true, // Automatically imports Vuetify components as needed
          })
    ],
    resolve: {
        alias: {
          '@': path.resolve(__dirname, 'resources/js'),
        },
      },
});

路由文件(resources/js/router/index.js)

import { createRouter, createWebHistory } from 'vue-router';

// Page components
import SignIn from '../pages/SignIn.vue'
import Register from '../pages/Register.vue'
import Request from '../pages/Request.vue'
import Congregation from '../pages/Congregation.vue';
import Territoryies from '../pages/Territories.vue';
import Territory from '../pages/Territory.vue'
import NotFound from '../pages/NotFound.vue';
import Print from '../pages/Print.vue'

// Firebase
import { getAuth, onAuthStateChanged } from 'firebase/auth'

const routes = [
{
    path:'/',
    redirect: '/territory',
    meta: {
        requiresAuth: false
    }
},
{
    path:'/sign-in',
    component: SignIn,
    meta: {
        requiresAuth: false
    }
},
{
    path:'/register',
    component: Register,
    meta: {
        requiresAuth: false
    }
},
{
    path:'/request',
    component: Request,
    meta: {
        requiresAuth: false
    }
},
{
    path:'/congregation',
    component: Congregation,
    meta: {
        requiresAuth: true
    }
},
{
    path:'/territory',
    component: Territoryies,
    meta: {
        requiresAuth: true
    }
},
{
    path:'/territory/:id',
    component: Territory,
        meta: {
        requiresAuth: true
    },
    props: true
},
{
    path:'/print',
    component: Print,
        meta: {
        requiresAuth: true
    }
},
{
    path: '/:pathMatch(.*)*',
    component: NotFound
}
]

const router = createRouter({
    history: createWebHistory(),
    routes
})

const getCurrentUser = () => {
    return new Promise((resolve, reject) => {
        const removeListener = onAuthStateChanged(
            getAuth(),
            (user) => {
                removeListener();
                resolve(user)
            },
            reject
        )
    })
}

router.beforeEach(async (to, from, next) => {
    // Check if the route requires authentication
    if (to.matched.some(record => record.meta.requiresAuth)) {
        try {
            const user = await getCurrentUser();
            
            if (user) {

                const result = await axios.get("/api/user", {
                    headers: {
                        Authorization: `Bearer ${$cookies.get(
                            "firebaseToken"
                        )}`,
                    },
                }); 

                if (!result.data.congregation_id) {

                    return next('/request');
                }
                else {
                    return next();
                }
            }

            return next('/sign-in');
        } catch (error) {
            // Handle errors, such as network issues
            console.error("Error during authentication check:", error);
            // Redirect to '/sign-in' or an error page
            return next('/sign-in');
        }
    } else {
        // Proceed to the requested route if no authentication is required
        return next();
    }
});

export default router;

文件结构

├───app
│   ├───Console
│   ├───Exceptions
│   ├───Http
│   │   ├───Controllers
│   │   └───Middleware
│   ├───Models
│   └───Providers
├───bootstrap
│   └───cache
├───config
├───database
│   ├───factories
│   ├───migrations
│   └───seeders
├───functions
│   
├───node_modules
│   
├───public
│   ├───assets
│   └───build
│       └───assets
├───resources
│   ├───css
│   ├───js
│   │   ├───components
│   │   ├───pages
│   │   ├───popups
│   │   ├───router
│   │   └───storage
│   └───views
├───routes
├───storage
│   ├───app
│   │   └───public
│   ├───framework
│   └───logs
├───tests
│   ├───Feature
│   └───Unit
└───vendor

内容的提问来源于stack exchange,提问作者Sam Bradshaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:27:36