vite 基本路径不尊重 dist 目录

vite base path doesnt respect dist-directory

我将 vite 纯粹用作开发服务器,后端服务器为我提供文件服务,并且与 vite 本身没有任何联系。我的 vite 应用程序位于嵌套路径下。这就是为什么我将配置中指定的 base-url 设置为“/my/path/”。这很好用,一切都正确。

一旦我 运行 构建,它会创建一个带有清单文件的 dist 文件夹。我的索引 HTML 由后端服务器提供,要么包含 dev 中的 vite devserver,要么加载 maninifest.json { "src/main.ts": { "file": "assets/main.b3ed3483.js", ...}} 指定的 main.ts。因此我的索引 HTML 看起来有点像这样:

<?php if($dev): ?>
  <script type="module" src="http://localhost:3000/@vite/client"></script>
  <script type="module" src="http://localhost:3000/src/main.ts"></script>
<?php else: ?>
<?php $entry = parseJson('dist/manifest.json'); /* pseudocode */ ?>
  <link rel="stylesheet" href="/my/path/dist/<?= $entry.css[0] ?>" />
  <script type="module" src="/my/path/dist/<?= $entry.file ?>"></script>
<?php endif ?>

现在,我遇到了一个问题,每当导入一个模块时,它都会尝试从 /my/path/assets 而不是 my/path/dist/assets 加载它。我尝试将基本路径更改为 /my/path/dist/ 但现在显然路径在 dev 中未正确解析。我需要做什么才能使这项工作正常进行?

我不确定我是否完全理解您脚本标签中的 src 路径,但我认为这应该可行,尽管您可能需要进行一些更改以使您的 src 路径匹配。

  • 选项一:如果您使用 linux,我会创建一个从 /my/path//dist/assets/ 的符号 link,例如ln -s -r ./dist/assets/ assets(-s 表示符号 link,-r 表示相对 links)。这将为同一目录提供两条路径,一条来自 /my/path/assets,一条来自 /my/path/dist/assets/.
  • 选项二:使用相对基本路径,即在您的 vite 配置中将 base 设置为 ''。注意:在 vite 2.x 中存在一个问题,如果您有多个入口点,资产路径将不正确。有个fix merged for vite 3.0.