Source:  Twitter logo

Im Building a website with Next.Js and I tried to implement an external .js file (Bootstrap.min.js & Popper.min.js) but it is not displayed. Im not sure what the problem is!

I implemented it like this:

import Head from 'next/head';

import Nav from './nav'

const Layout = (props) => (

        {/* Meta tags */}
        <meta charset="utf-8"></meta>
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"></meta>
        {/* Standard page css */}
        <link rel="stylesheet" type="text/css" href="/static/css/page.css"/>
        {/* Bootstrap CSS */}
        <link rel="stylesheet" href="/static/includes/bootstrap.min.css"/>

        {/* jQuery first, then Popper.js, then Bootstrap JS */}
        <script src="/static/includes/popper.min.js"></script>
        <script type="text/javascript" src="/static/includes/bootstrap.min.js"></script>

export default Layout;

It looks good to me? what am I missing, it's not projecting as it should!

When I tried a script inside the page it shows "Hello JavaScript" for a very short time and then it disappears?

<p id="demo"></p>
<script>document.getElementById("demo").innerHTML = "Hello JavaScript";</script>

How do i fix it?

Please help!

Im Using: "next": "^8.0.3", "react": "^16.8.4", "react-dom": "^16.8.4"

  1. You need to put all your scripts inside the Head tag.
  2. Don't put raw javascript inside the Head tag. Put it in a separate file and import the script in the Head tag

You can create a .js file, which contains your raw js code, in the public folder and then use the script in the Head tag. I am not sure why we have to do this, but this is how it works in Next.js

So for your problem, this will work:


document.getElementById("demo").innerHTML = "Hello JavaScript";


import Head from 'next/head';

const Layout = (props) => (
        {/* import external javascript */}
        <script type="text/javascript" src="..."></script>
        <script type="text/javascript" src="/js/myscript.js"></script>
    <p id="demo"></p>

export default Layout;
17 users liked answer #0dislike answer #017
GunnerFan profile pic

You can use Script tag from next/script for importing external .js files.

The following is an example snippet from one of my projects. I had to import the script at the end of the page due to some DOM manipulations so the Script tag worked exceptionally well :)

import Script from "next/script";
import Content from "../components/Content";
import Header from "../components/Header";

const index = () => {
  return (
      <Header />
      <Content />
      <Script type="text/javascript" src="./assets/js/main.js" />

export default index;
9 users liked answer #1dislike answer #19
Tejas Shetty profile pic
Tejas Shetty

This is working as Expected for me.

  __html: `
  console.log('Console message');
3 users liked answer #2dislike answer #23
saravanakumar profile pic

@GunnerFan was in the right path. NextJS recommends putting these files in the public folder


import Head from "next/head";

// ... elsewhere in your code 
        <script type="text/javascript" src="js/myscript.js"></script>

You can refer to files in the folder directly, e.g: js/<your file> Be careful not to name them same as files in the pages directory, i.e INCORRECT: pages/myscript.js & js/myscript.js


2 users liked answer #3dislike answer #32
Ramakay profile pic

Copyright © 2022 QueryThreads

All content on Query Threads is licensed under the Creative Commons Attribution-ShareAlike 3.0 license (CC BY-SA 3.0).