Анд*_*рей 5 javascript monorepo vite turborepo
我正在尝试使用 Turborepo 制作 monorepo。我在那里有很多 Vue 项目,我需要在所有应用程序之间共享 Vite 配置。以下是我试图实现这一目标的方法。
我有一个名为@monorepo/configs:
packages/
configs/
package.json
index.ts
vite.config.base.ts
Run Code Online (Sandbox Code Playgroud)
包.json:
{
"name": "@monorepo/configs",
"version": "0.0.1",
"private": true,
"type": "module",
"main": "index.ts",
"types": "index.ts",
"files": [
"./src/tsconfig.base.json",
"./src/vite.config.base.js"
]
}
Run Code Online (Sandbox Code Playgroud)
vite.config.base.ts:
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
// regular config
export const ViteConfigBase = defineConfig({
resolve: {
alias: {
// some aliases
}
}
})
Run Code Online (Sandbox Code Playgroud)
索引.ts:
export { ViteConfigBase } from './vite.config.base'
Run Code Online (Sandbox Code Playgroud)
在另一个应用程序的 vite.config.ts 中:
import { fileURLToPath, URL } from 'node:url'
import { ViteConfigBase } from '@monorepo/configs/src/vite.config.base' // notice import from 'src'
import { defineConfig, mergeConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig(mergeConfig(
ViteConfigBase,
{
plugins: [vue()],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
}
}
))
Run Code Online (Sandbox Code Playgroud)
在这里,我从“src”文件夹将 ViteConfigBase 作为文件导入,这是我收到的错误npm run dev:
> @monorepo/sandbox@0.0.0 dev
> vite
failed to load config from C:\Users\user\Desktop\Code\Personal\monorepo\apps\Sandbox\vite.config.ts
error when starting dev server:
Error [ERR_REQUIRE_ESM]: require() of ES Module C:\Users\user\Desktop\Code\Personal\monorepo\packages\Config\src\vite.config.base.js from C:\Users\user\Desktop\Code\Personal\monorepo\apps\Sandbox\vite.config.ts not supported.
Instead change the require of vite.config.base.js in C:\Users\user\Desktop\Code\Personal\monorepo\apps\Sandbox\vite.config.ts to a dynamic import() which is available in all CommonJS modules.
Run Code Online (Sandbox Code Playgroud)
如果我将从“src”文件夹导入更改为从索引导入,如下所示:
import { fileURLToPath, URL } from 'node:url'
import { ViteConfigBase } from '@monorepo/configs' // <-- here
import { defineConfig, mergeConfig } from 'vite'
// other config...
Run Code Online (Sandbox Code Playgroud)
那么错误将会是这样的:
> @monorepo/sandbox@0.0.0 dev
> vite
failed to load config from C:\Users\user\Desktop\Code\Personal\monorepo\apps\Sandbox\vite.config.ts
error when starting dev server:
C:\Users\user\Desktop\Code\Personal\monorepo\packages\Config\index.ts:1
export { ViteConfigBase } from './src/vite.config.base'
^^^^^^
SyntaxError: Unexpected token 'export'
Run Code Online (Sandbox Code Playgroud)
哦好吧,我以前见过。让我们尝试一下 package.json 中的 "type": "module" 。现在这就是错误:
> @monorepo/sandbox@0.0.0 dev
> vite
failed to load config from C:\Users\user\Desktop\Code\Personal\monorepo\apps\Sandbox\vite.config.ts
error when starting dev server:
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for C:\Users\user\Desktop\Code\Personal\monorepo\packages\Config\index.ts
Run Code Online (Sandbox Code Playgroud)
这就是我被困住的地方。我肯定需要这些文件为 .ts(并且我不确定如果我将扩展名更改为 .js,它们是否会起作用)。
我也可以通过添加构建步骤轻松解决此问题,但我认为没有必要,应该有解决办法。构建步骤将为开发过程和代码本身增加大量开销。我已经尝试过了,dist文件夹无缘无故大约有 4Mb 左右。另外,在这种情况下,我将无法使用“转到定义”功能,最后但并非最不重要的一点是,每次更改后都必须重新构建它,所以我真的希望避免这一步,只在各处使用原始配置文件。
jin*_*ma 5
如果你使用 Turborepo,这样怎么样?
\n/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 apps\n| \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 app1\n| | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n| | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n| | \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vite.config.ts\n| \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 app2\n| \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n| \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n| \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vite.config.ts\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 packages\n| \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 viconfig\n| \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 index.js\n| \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 package.json\nRun Code Online (Sandbox Code Playgroud)\n/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 apps\n| \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 app1\n| | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n| | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n| | \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vite.config.ts\n| \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 app2\n| \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n| \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n| \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vite.config.ts\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 packages\n| \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 viconfig\n| \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 index.js\n| \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 package.json\nRun Code Online (Sandbox Code Playgroud)\n// apps/app1/package.json\n\n{\n "name": "app1",\n "devDependencies": {\n "viconfig": "workspace:*",\n "vite": "4.0.0"\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n// apps/app1/vite.config.ts\n\nimport { defineConfig } from "vite";\nimport customConfig from "viconfig";\n\nexport default defineConfig(() => {\n return {\n ...customConfig,\n };\n});\nRun Code Online (Sandbox Code Playgroud)\n// packages/viconfig/index.js\n\nimport path from "node:path";\n\nexport default {\n resolve: {\n alias: {\n "@": path.resolve(process.cwd(), "src"),\n },\n },\n};\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4923 次 |
| 最近记录: |