First thing .. npm run start/build/dev etc are just NPM scripts that are specified in the package.json under the scripts section. They can be anything, but according to Nuxt docs this is the default:
"scripts": {
"dev": "nuxt",
"build": "nuxt build",
"generate": "nuxt generate",
"start": "nuxt start"
}
So that's what's actually running when you doing those.
That said, I think where you are getting confused is that there's two ways to host these projects. As a server, or as a static site.
When you are running it locally you are running it as a server and that's why you can browse to localhost in your browser and see what you are working on and that's why there's no index.html.
It's fine to do that and then host it statically though. That's where the building part comes in. Usually webpack compiles everything into a bunch of normal html and other assets that can be read by any browser (without the need of them being actively served (like what your dev server is doing locally).
Try:
Setting target: 'static' in your nuxt.config.js
export default {
target: 'static' // default is 'server'
}
and then run your: (which is actually running nuxt generate)
npm run generate
The other option is to host stuff online as a running server, which you can do on hosting like Heroku or Digital Ocean or AWS .. and you usually make a build script that will set it up and serve it, like how your local dev server was, but online. But often hosting things statically is fine.
Hope that sheds a bit of light on the situation. Write a comment if you still having trouble.