首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Vite配置Svelte项目,以便在构建过程中不会复制静态文件?

如何使用Vite配置Svelte项目,以便在构建过程中不会复制静态文件?
EN

Stack Overflow用户
提问于 2022-03-06 06:43:24
回答 1查看 4.4K关注 0票数 3

在普通的Svelte项目(没有SvelteKit)中,静态文件位于public目录中,当运行npm run build (rollup -c)时,src文件夹被编译成public/build,然后公用文件夹可以托管在某个地方。

现在,我将(一个已经存在的) Svelte项目转换为Vite,静态文件仍然在public下,但是当运行npm run build (vite build)时,所有内容都绑定到dist目录中。因此,public目录中的所有文件实际上都在项目中复制和存在两次。这意味着,当更改或添加某些内容(不影响应用程序逻辑)时,项目需要重新构建,然后才能重新部署。

这是否可以通过配置进行更改,即所有已编译的文件都再次添加到public目录中,或者静态文件直接驻留在dist中,而在构建过程中没有复制任何内容?

编辑:项目应该仍然能够在开发模式npm run dev (vite)中运行,并提供资产。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-06 13:42:20

是的,您可以将公共文件保存在dist中,而无需复制,但这有点“黑客”。

首先,需要禁用publicDir选项来禁用复制。

然后禁用emptyOutdir以保留文件。

最后,您可能希望清理旧资产,因此添加了一个buildStart挂钩,在构建开始时清除dist/assets

最后一个vite.config.js (您可能需要添加一些错误处理):

代码语言:javascript
运行
复制
import { defineConfig } from 'vite'
import { svelte } from '@sveltejs/vite-plugin-svelte'
import { rm } from 'fs/promises'

// https://vitejs.dev/config/
export default defineConfig(({ command }) => ({
  plugins: [
    svelte(),
    {
      buildStart() {
        if (command === 'build')
          rm('./dist/assets', { recursive: true }).catch(() => {})
      }
    },
  ],
  publicDir: false,
  build: {
    emptyOutDir: false,
  }
}))

更新:为了在npm run dev中提供这些文件,需要额外的黑客攻击。您需要创建一个自定义服务器来实现这一点。(Vite似乎没有提供配置方法。)

server.js

代码语言:javascript
运行
复制
import express from 'express'
import { createServer as createViteServer } from 'vite'

// Or use require if nodejs complains about ES module
// const express = require('express')
// const { createServer: createViteServer } = require('vite')

async function createServer() {
  const app = express()

  // Create Vite server in middleware mode.
  const vite = await createViteServer({
    server: { middlewareMode: 'html'},
  })

  // Do not serve built index.html when visiting http://localhost:3000/
  app.use(express.static('dist', { index: false }))

  // Use vite's connect instance as middleware
  app.use(vite.middlewares)

  app.listen(3000)
}

createServer()

并在"dev": "vite"中用"dev": "node server.js"替换package.json

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71368209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档