Penyemak imbas nampaknya membaca fail JavaScript sebagai HTML dan menerima "Ralat Syntax Tidak Dijangkit: Token tidak dijangka '<'"
P粉520545753
2023-09-05 13:59:44
<p>Serupa dengan soalan yang tidak dijawab ini: Penyemak imbas kelihatan membaca fail React JS sebagai HTML, bukan JSX</p>
<p>Saya mempunyai projek yang dibina menggunakan Next.js, React dan Typescript. </p>
<p>Tetapi sekarang saya cuba menambah beberapa fail Javascript seperti <code>testScroll.js</code>: </p>
<pre class="brush:php;toolbar:false;">function init() {
window.scrollTo(0, 1);
window.scrollTo(0, -1);
console.log('menatal')
}
init()</pre>
<p>Saya menyimpan skrip ini di <code>public/js/testScroll.js</code>. Saya cuba menggunakannya pada komponen <code>index.tsx</code>
<pre class="brush:php;toolbar:false;">import { type NextPage } dari "next";
import { Footer, Header, HomePageWrapper } daripada "~/componentsFromWebflow/homeComponents";
import Skrip daripada "seterusnya/skrip";
import Head dari "next/head";
const Laman Utama: NextPage = () =>
kembali (
<>
<Kepala>
<meta charSet="utf-8"
<title>Ace-it</title>
<nama meta="keterangan" kandungan="kandungan"
< kandungan meta="lebar=lebar peranti, skala awal=1"
<pautan href="https://fonts.googleapis.com" rel="prasambung"
<pautan href="https://fonts.gstatic.com" rel="prasambung"
<pautan href="https://uploads-ssl.webflow.com/64296e49c388ed7c157635f0/64296e49c388eda6b076360c_Faivcon%2032.svg"relcut=""""
<pautan href="https://uploads-ssl.webflow.com/64296e49c388ed7c157635f0/64296e49c388edc81976360d_Faivcon%20256.svg"/ipple"
<pautan rel="ikon" href="/favicon.ico"
</Kepala>
<Pengepala />
<HomePageWrapper />
<Footer />
<Skrip src="./js/scrollTest.js"
type="teks/javascript"
strategi="beforeInteractive"
</>
);
};
eksport lalai Laman Utama;</pre>
<p>Saya telah mencuba setiap strategi yang mungkin dengan teg <kod>Skrip</code></p>
<p>Masalahnya ialah<strong>apabila saya memuatkan halaman buat kali pertama ia menimbulkan ralat berikut</strong>:</p>
<blockquote>
<p>Ralat sintaks tidak ditangkap: Token tidak dijangka '<' di scrollTest.js:1:1</p>
</blockquote>
<p>Sudah tentu, jika saya menyemak tab Sumber pada Explorer, ia kelihatan seperti ini: </p>
<p><strong>Tetapi selepas memuat semula beberapa kali</strong> (biasanya hanya sekali), ia <strong>mula berfungsi</strong>
</p>
<p>Selain itu, saya mempunyai <kod>perisian tengah.ts</code>:</p>
<pre class="brush:php;toolbar:false;">import { getAuth, withClerkMiddleware } daripada "@clerk/nextjs/server";
import { NextResponse } daripada "next/server";
jenis import { NextRequest } daripada 'next/server'
// Tetapkan laluan yang tidak memerlukan pengguna untuk dilog masuk
const publicPaths = ['/', '/api/stripe-webhook*', '/api/clerk-webhook*']
const isPublic = (laluan: rentetan) =>
kembalikan publicPaths.find(x =>
path.match(RegExp baharu(`^${x}$`.replace('*$', '($|/)')))
)
}
eksport lalai denganClerkMiddleware((req: NextRequest) => {
if (isPublic(req.nextUrl.pathname)) {
kembalikan NextResponse.next()
}
console.log("perisian tengah berjalan");
const {userId } = getAuth(req);
jika (!userId) {
console.log('userId is null, undefined or kosong');
const indexUrl = URL baharu('/', req.url)
indexUrl.searchParams.set('redirect_url', req.url)
kembalikan NextResponse.redirect(indexUrl)
}
kembalikan NextResponse.next();
});
// Hentikan Middleware berjalan pada fail statik
export const config = { matcher: '/((?!_next/image|_next/static|favicon.ico).*)', };</pre>
<p>Nampaknya jika saya memadamkan kuki daripada explorer, ralat muncul, tetapi masih tidak tahu mengapa dan bagaimana untuk membetulkannya. </p>
<p>Apa yang berlaku dan bagaimana untuk membetulkannya? </p>
Anda mendapat ralat ini kerana
"/js/scrollTest.js"
(Script
标记的路径)不是被忽略路径的一部分。因此,当您输入中间件时,您将返回带有NextResponse.redirect(indexUrl)
ialah HTML dan penyemak imbas memerlukan fail JavaScript.Anda hanya boleh menambah
js/scrollTest.js
pada konfigurasi: