添加 Nitro Rollup 配置选项会破坏 Nuxt 应用程序中的构建过程

问题描述 投票:0回答:1

我正在使用 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
文件之前的常规文件。

有没有办法添加它,这样就不会影响常规构建过程?

typescript nuxt.js node-modules rollupjs nitro
1个回答
0
投票

我发现实现此目的的最简单方法是使用

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
启动服务器,就像没有修改一样。

© www.soinside.com 2019 - 2024. All rights reserved.