ブラウザは JavaScript ファイルを HTML として読み取っているように見え、「Uncaught SyntaxError: Unexpected token '<'」を受け取ります。
P粉520545753
2023-09-05 13:59:44
<p>この未回答の質問と同様: ブラウザは React JS ファイルを JSX ではなく HTML として読み取るようです</p>
<p>Next.js、React、Typescript を使用してプロジェクトを構築しました。 </p>
<p>しかし今、<code>testScroll.js</code> のような Javascript ファイルを追加しようとしています。 </p>
<pre class="brush:php;toolbar:false;">function init() {
window.scrollTo(0, 1);
window.scrollTo(0, -1);
console.log('スクロール')
}
init()</pre>
<p>このスクリプトは <code>public/js/testScroll.js</code> に保存しました。この <code>index.tsx</code> コンポーネントでそれを使用しようとします: </p>
<pre class="brush:php;toolbar:false;">import { type NextPage } from "next";
import { Footer, Header, HomePageWrapper } from "~/componentsFromWebflow/homeComponents";
"next/script" からスクリプトをインポートします。
import Head from "next/head";
const ホーム: NextPage = () => {
戻る (
<>
<頭>
<meta charSet="utf-8" />
<title>エースイット</title>
<メタ名="説明"コンテンツ="コンテンツ"/>
<meta content="width=device-width,initial-scale=1" name="viewport" />
<link href="https://fonts.googleapis.com" rel="preconnect" />
<link href="https://fonts.gstatic.com" rel="preconnect"crossOrigin="anonymous" />
<link href="https://uploads-ssl.webflow.com/64296e49c388ed7c157635f0/64296e49c388eda6b076360c_Faivcon 32.svg" rel="ショートカット アイコン" type="image/x-icon" />
<link href="https://uploads-ssl.webflow.com/64296e49c388ed7c157635f0/64296e49c388edc81976360d_Faivcon 256.svg" rel="apple-touch-icon" />
<link rel="icon" href="/favicon.ico" />
</頭>
<ヘッダー/>
<HomePageWrapper />
<フッター/>
<スクリプト src="./js/scrollTest.js"
type="テキスト/javascript"
Strategy="beforeInteractive" />
</>
);
};
デフォルトのホームをエクスポート;</pre>
<p><code>Script</code> タグを使用して考えられるすべての戦略を試しましたが、何も機能しません。</p>
<p>問題は<strong>初めてページをロードすると次のエラーがスローされる</strong>: </p>
<ブロック引用>
<p>キャッチされない構文エラー:scrollTest.js:1:1</p> で予期しないトークン '<' が発生しました。
</blockquote>
<p>もちろん、エクスプローラーの [ソース] タブを確認すると、次のようになります。 </p>
<p><strong>しかし、数回リロードすると</strong> (通常は 1 回だけ)、<strong>動作し始め</strong> 、正しいコードが表示されます。
</p>
<p>また、<code>middleware.ts</code>: </p> もあります。
<pre class="brush:php;toolbar:false;">import { getAuth, withClerkMiddleware } from "@clark/nextjs/server";
import { NextResponse } から "next/server";
インポート タイプ { NextRequest } から 'next/server'
// ユーザーのサインインを必要としないパスを設定します
const publicPaths = ['/', '/api/ストライプ-webhook*', '/api/clark-webhook*']
const isPublic = (パス: 文字列) => {
return publicPaths.find(x =>
path.match(new RegExp(`^${x}$`.replace('*$', '($|/)')))
)
}
デフォルトをエクスポート withClerkMiddleware((req: NextRequest) => {
if (isPublic(req.nextUrl.pathname)) {
NextResponse.next() を返す
}
console.log("ミドルウェア実行中");
const { userId } = getAuth(req);
if (!userId) {
console.log('userId が null、未定義、または空です');
const IndexUrl = 新しい URL('/', req.url)
IndexUrl.searchParams.set('redirect_url', req.url)
NextResponse.redirect(indexUrl) を返す
}
NextResponse.next() を返します。
});
// 静的ファイル上で実行されているミドルウェアを停止します
import const config = { matcher: '/((?!_next/image|_next/static|favicon.ico).*)', };</pre>
<p>エクスプローラーからCookieを削除するとエラーが表示されるようですが、原因と修正方法がまだわかりません。 </p>
<p>何が起こったのでしょうか?その解決方法は何ですか? </p>
"/js/scrollTest.js"
(Script
でマークされたパス) が無視されるパスの一部ではないため、このエラーが発生します。したがって、ミドルウェアに入ると、NextResponse.redirect(indexUrl)
で HTML が返され、ブラウザには JavaScript ファイルが必要です。js/scrollTest.js
を構成に追加するだけです: