我正在使用 Nuxt,我需要将几个特定的 .ts 文件编译成要运行的模块。我已将以下内容添加到
nuxt.config.ts
文件中:
nitro: {
rollupConfig: {
input: ['./server/app.ts', './server/process1.ts', './server/process2.ts'],
output: {
inlineDynamicImports: false,
dir: "lib",
format: "module",
entryFileNames: "[name].js"
}
}
}
这将按预期运行,并将 3 个新的 .js 文件添加到名为“lib”的文件夹中。问题是,添加此代码似乎已恢复/停止/干扰了我的硝基服务器其余部分的常规构建过程(大概是 nuxt 自己的构建配置)。
常规行为是硝基输出文件生成到 .output 目录,但该目录没有将其添加到我的
nuxt.config.ts
文件之前的常规文件。
有没有办法添加它,这样就不会影响常规构建过程?
我发现实现此目的的最简单方法是使用
nitro:build:before
钩子。
import path from 'node:path';
import { fileURLToPath } from 'url';
export default defineNuxtConfig({
...
hooks: {
'nitro:build:before': nitro => {
if (nitro.options.rollupConfig) {
nitro.options.rollupConfig.input = {
// This is nitros default entry, which will generate the ./output/server/index.mjs
index: nitro.options.entry,
// These are the Custom entrypoints, where the key will
// be the name of the script in the output directory.
// NOTE: the `../` at the beginning of the path is required
// because `import.meta.url` resolves to the nuxt.config.ts
// itself and not the the root of the project.
app: fileURLToPath(path.join(import.meta.url, '../server/app.ts')),
process1: fileURLToPath(path.join(import.meta.url, '../server/process1.ts')),
process2: fileURLToPath(path.join(import.meta.url, '../server/process2.ts')),
// or when your script is in the server dir you could also use:
process2: fileURLToPath(path.join(nitro.options.srcDir, './process2.ts')),
};
nitro.options.rollupConfig.output = {
entryFileNames: '[name].mjs',
};
}
},
},
...
});
这将产生以下输出结构:
.output/
public/
server/
chunks/
node_modules/
app.mjs
index.mjs
package.json
process1.mjs
process2.mjs
并使用
node .output/server/index.mjs
启动服务器,就像没有修改一样。