Подавать статический файл javascript из API nextjs

Мне нужен маршрут в сборке веб-сайта с помощью nextjs, который отправляет javascript, который можно использовать на другом веб-сайте для выполнения некоторых действий.

Я создал новый файл в pages/api, назовем его sendTest.ts, чтобы он находился в pages/api/sendTest.ts. В той же папке я создал файл test.ts, который хочу отправить из sendTest.ts.

sendTest.ts

      import type { NextApiRequest, NextApiResponse } from 'next'
import fs from 'fs';
import path from 'path'

const filePath = path.join(__dirname, 'test.js');
const file = fs.readFileSync(filePath);

export default function handler(
  req: NextApiRequest,
  res: NextApiResponse
) {
  res.setHeader('Content-Type', 'text/javascript');
  res.status(200).send(file)
}

test.ts

      console.log('hello');

После сборки nextjs передает этот файл на веб-сайт.com/api/sendTest, но после связывания он заканчивается как

      "use strict";
(() => {
var exports = {};
exports.id = 318;
exports.ids = [318];
exports.modules = {

/***/ 211:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
console.log("hello there");



/***/ })

};
;

// load runtime
var __webpack_require__ = require("../../webpack-api-runtime.js");
__webpack_require__.C(exports);
var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
var __webpack_exports__ = (__webpack_exec__(211));
module.exports = __webpack_exports__;

})();

который при использовании на другой странице как

      <script src="website.com/api/sendTest"></script>

приводит к ошибке

      Uncaught ReferenceError: require is not defined
at sendTest:22:27
at sendTest:28:3

Мой вопрос: как я могу заставить nextjs пропустить загрузку веб-пакета в этот файл и просто разрешить машинописному тексту изменять содержимое в javascript и обслуживать файл как есть? Или есть лучший способ сделать то, что я хочу, а именно отправить javascript с указанного маршрута nextjs?

1 ответ

У меня это тоже сработало, вот фрагмент кода для NextJS 13 с использованием маршрутизатора приложений:

      import { readFileSync } from 'fs'
import path from 'path'

export function GET() {
  const body = readFileSync(path.resolve('.', 'src/script.js'))
  return new Response(body, { headers: { 'Content-Type': 'text/javascript' } })
}
Другие вопросы по тегам