| 1 | # import/unambiguous
|
|---|
| 2 |
|
|---|
| 3 | <!-- end auto-generated rule header -->
|
|---|
| 4 |
|
|---|
| 5 | Warn if a `module` could be mistakenly parsed as a `script` by a consumer leveraging
|
|---|
| 6 | [Unambiguous JavaScript Grammar] to determine correct parsing goal.
|
|---|
| 7 |
|
|---|
| 8 | Will respect the [`parserOptions.sourceType`] from ESLint config, i.e. files parsed
|
|---|
| 9 | as `script` per that setting will not be reported.
|
|---|
| 10 |
|
|---|
| 11 | This plugin uses [Unambiguous JavaScript Grammar] internally to decide whether
|
|---|
| 12 | dependencies should be parsed as modules and searched for exports matching the
|
|---|
| 13 | `import`ed names, so it may be beneficial to keep this rule on even if your application
|
|---|
| 14 | will run in an explicit `module`-only environment.
|
|---|
| 15 |
|
|---|
| 16 | ## Rule Details
|
|---|
| 17 |
|
|---|
| 18 | For files parsed as `module` by ESLint, the following are valid:
|
|---|
| 19 |
|
|---|
| 20 | ```js
|
|---|
| 21 | import 'foo'
|
|---|
| 22 | function x() { return 42 }
|
|---|
| 23 | ```
|
|---|
| 24 |
|
|---|
| 25 | ```js
|
|---|
| 26 | export function x() { return 42 }
|
|---|
| 27 | ```
|
|---|
| 28 |
|
|---|
| 29 | ```js
|
|---|
| 30 | (function x() { return 42 })()
|
|---|
| 31 | export {} // simple way to mark side-effects-only file as 'module' without any imports/exports
|
|---|
| 32 | ```
|
|---|
| 33 |
|
|---|
| 34 | ...whereas the following file would be reported:
|
|---|
| 35 |
|
|---|
| 36 | ```js
|
|---|
| 37 | (function x() { return 42 })()
|
|---|
| 38 | ```
|
|---|
| 39 |
|
|---|
| 40 | ## When Not To Use It
|
|---|
| 41 |
|
|---|
| 42 | If your application environment will always know via [some other means](https://github.com/nodejs/node-eps/issues/13)
|
|---|
| 43 | how to parse, regardless of syntax, you may not need this rule.
|
|---|
| 44 |
|
|---|
| 45 | Remember, though, that this plugin uses this strategy internally, so if you were
|
|---|
| 46 | to `import` from a module with no `import`s or `export`s, this plugin would not
|
|---|
| 47 | report it as it would not be clear whether it should be considered a `script` or
|
|---|
| 48 | a `module`.
|
|---|
| 49 |
|
|---|
| 50 | ## Further Reading
|
|---|
| 51 |
|
|---|
| 52 | - [Unambiguous JavaScript Grammar]
|
|---|
| 53 | - [`parserOptions.sourceType`]
|
|---|
| 54 | - [node-eps#13](https://github.com/nodejs/node-eps/issues/13)
|
|---|
| 55 |
|
|---|
| 56 | [`parserOptions.sourceType`]: https://eslint.org/docs/user-guide/configuring#specifying-parser-options
|
|---|
| 57 | [Unambiguous JavaScript Grammar]: https://github.com/nodejs/node-eps/blob/HEAD/002-es-modules.md#32-determining-if-source-is-an-es-module
|
|---|