Подавать статический файл 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' } })
}