Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

new ESM implementation #26745

Merged
merged 1 commit into from
Mar 27, 2019
Merged

new ESM implementation #26745

merged 1 commit into from
Mar 27, 2019

Commits on Mar 27, 2019

  1. esm: phase two of new esm implementation

    This PR updates the current `--experimental-modules` implementation
    based on the work of the modules team  and reflects Phase 2 of our
    new modules plan.
    
    The largest differences from the current implementation include
    
    * `packge.type` which can be either `module` or `commonjs`
      - `type: "commonjs"`:
        - `.js` is parsed as commonjs
        - default for entry point without an extension is commonjs
      - `type: "module"`:
        - `.js` is parsed as esm
        - does not support loading JSON or Native Module by default
        - default for entry point without an extension is esm
    * `--entry-type=[mode]`
      - allows you set the type on entry point.
    * A new file extension `.cjs`.
      - this is specifically to support importing commonjs in the
        `module` mode.
      - this is only in the esm loader, the commonjs loader remains
        untouched, but the extension will work in the old loader if you use
        the full file path.
    * `--es-module-specifier-resolution=[type]`
      - options are `explicit` (default) and `node`
      - by default our loader will not allow for optional extensions in
        the import, the path for a module must include the extension if
        there is one
      - by default our loader will not allow for importing directories that
        have an index file
      - developers can use `--es-module-specifier-resolution=node` to
        enable the commonjs specifier resolution algorithm
      - This is not a “feature” but rather an implementation for
        experimentation. It is expected to change before the flag is
        removed
    * `--experimental-json-loader`
      - the only way to import json when `"type": "module"`
      - when enable all `import 'thing.json'` will go through the
        experimental loader independent of mode
      - based on whatwg/html#4315
    * You can use `package.main` to set an entry point for a module
      - the file extensions used in main will be resolved based on the
        `type` of the module
    
    Refs: https://github.com/nodejs/modules/blob/master/doc/plan-for-new-modules-implementation.md
    Refs: https://github.com/GeoffreyBooth/node-import-file-specifier-resolution-proposal
    Refs: nodejs/modules#180
    Refs: nodejs/ecmascript-modules#6
    Refs: nodejs/ecmascript-modules#12
    Refs: nodejs/ecmascript-modules#28
    Refs: nodejs/modules#255
    Refs: whatwg/html#4315
    Refs: WICG/webcomponents#770
    Co-authored-by: Myles Borins <MylesBorins@google.com>
    Co-authored-by: John-David Dalton <john.david.dalton@gmail.com>
    Co-authored-by: Evan Plaice <evanplaice@gmail.com>
    Co-authored-by: Geoffrey Booth <webmaster@geoffreybooth.com>
    Co-authored-by: Michaël Zasso <targos@protonmail.com>
    
    PR-URL: nodejs#26745
    Reviewed-By: Gus Caplan <me@gus.host>
    Reviewed-By: Guy Bedford <guybedford@gmail.com>
    Reviewed-By: Ben Coe <bencoe@gmail.com>
    Reviewed-By: James M Snell <jasnell@gmail.com>
    Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
    Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
    Reviewed-By: Сковорода Никита Андреевич <chalkerx@gmail.com>
    guybedford authored and MylesBorins committed Mar 27, 2019
    Configuration menu
    Copy the full SHA
    b1094db View commit details
    Browse the repository at this point in the history