ModuleSpecifier: include ".js" or not?

# Axel Rauschmayer (10 years ago)

In Node.js you can either mention the file extension ".js" or omit it when you require a module. Which one is preferred for ES6 ModuleSpecifiers?

Thanks!

Axel

# Wes Garland (10 years ago)

Some food for thought from a non-standard use-case.

In GPSEE, we can require("module") - but we support both modules written in JavaScript, and modules written in C (technically, any compiled binary with the correct C API), or both. We dlload("module.so") (if present), then interpret "module.js" (if present) as part of the module loading procedure.

So, from my POV, loading a module from script with the extension .js is not ideal. If you are going to assign meaning to the extension, you must think about what it means. In our case, it indicates the file type to load, and the implementation of the library is not relevant to the library user - only the API matters. And if you are only ever going to allow one extension type, then there is no point to typing .js on the end of every module name.

In my opinion, the ModuleSpecifier should be fed the module name, and is it up to the loader to munge the filename (eg by adding .js) as it sees fit.

# monolithed (10 years ago)

This question has already been asked esdiscuss/2015-February/041430

I prefer to follow the following rules:

File structure

root/
   foo/
       index.js

Export module

   export default foo class () {}

Import module

import foo from './foo';