The static
import
statement is used toimport
read only live bindings which are exported by another module. The imported bindings are called live bindings because they are updated by the module that exported the binding, but cannot be re-assigned by the importing module.(c) MDN
πPutout plugin adds ability to transform to new Node.js API and apply best practices.
npm i putout @putout/plugin-esm -D
- β add-index-to-import;
- β apply-export-from;
- β declare-imports-first;
- β group-imports-by-source;
- β merge-duplicate-imports;
- β merge-declaration-with-export;
- β remove-quotes-from-import-assertions;
- β remove-empty-import;
- β remove-empty-export;
- β remove-useless-export-specifiers;
- β sort-imports-by-specifiers;
- β inline-export;
{
"rules": {
"esm/add-index-to-import": "on",
"esm/apply-export-from": "on",
"esm/declare-imports-first": "on",
"esm/group-imports-by-source": "on",
"esm/merge-duplicate-imports": "on",
"esm/merge-declaration-with-export": "on",
"esm/remove-quotes-from-import-assertions": "on",
"esm/remove-empty-export": "on",
"esm/remove-empty-import": ["on", {
"ignore": []
}],
"esm/sort-imports-by-specifiers": "on",
"esm/resolve-imported-file": "off",
"esm/apply-namespace-of-file": "off",
"esm/inline-export": "off",
"esm/remove-useless-export-specifiers": "off"
}
}
ESM doesn't add index.js
, so it can be left after @putout/plugin-convert-esm-to-commonjs
.
Checkout in πPutout Editor.
import insertRust from './insert-rust.js';
import addAction from './add-action.js';
export const rules = {};
import insertRust from './insert-rust/index.js';
import addAction from './add-action/index.js';
export const rules = {};
The
export
declaration is used to export values from a JavaScript module.(c) MDN
Check out in πPutout Editor.
import * as ns_1 from 'x';
export {
ns_1 as ns,
};
export * as ns from 'x';
Check out in πPutout Editor.
const stack = [];
function sum(a, b) {
i32.add(local.get(), local.get());
}
export {
sum,
stack,
};
export const stack = [];
export function sum(a, b) {
i32.add(local.get(), local.get());
}
Check out in πPutout Editor.
export const hello = () => 'world';
export const {
- hello,
}
Check out in πPutout Editor. For CommonJS use nodejs/declare-after-require.
const [arg] = process.argv;
import esbuild from 'esbuild';
import esbuild from 'esbuild';
const [arg] = process.argv;
Group order:
- β builtins;
- β external;
- β hashed;
- β internal;
Checkout in πPutout Editor.
import fs from 'node:fs';
import {lodash} from 'lodash';
import react from 'react';
import d from '../hello.js';
import ss from '../../bb/ss.js';
import b from './ss.js';
import parse from '#parser';
const c = 5;
import fs from 'node:fs';
import react from 'react';
import {lodash} from 'lodash';
import parse from '#parser';
import b from './ss.js';
import d from '../hello.js';
import ss from '../../bb/ss.js';
const c = 5;
Checkout in πPutout Editor.
const {
report,
fix,
scan,
} = createRemoveFiles(['*.swp', '*.swo']);
export {
report,
fix,
scan,
};
export const {
report,
fix,
scan,
} = createRemoveFiles(['*.swp', '*.swo']);
To disable use:
{
"rules": {
"esm/merge-duplicate-imports-join": "off"
}
}
import test from 'supertape';
import {stub} from 'supertape';
import test, {stub} from 'supertape';
Checkout in πPutout Editor.
To disable use:
{
"rules": {
"esm/merge-duplicate-imports-rename": "off"
}
}
import putout from './putout.js';
import all from './putout.js';
import x from './putout.js';
console.log(all);
console.log(x);
import putout from './putout.js';
console.log(putout);
console.log(putout);
-export {};
-import 'abc';
Checkout in πPutout Editor.
import json from './mod.json' with { type: 'json' };
import json from './mod.json' with { type: 'json' };
Checkout in πPutout Editor.
import {
a,
b,
c,
d,
} from 'd';
import a1 from 'a1';
import a1 from 'a1';
import {
a,
b,
c,
d,
} from 'd';
This feature would ideally use the
with
keyword to denote attributes, but there are existing implementations based on a previous version of the proposal using theassert
keyword. Due to potential web compatibility risks, the proposal still includesassert
marked as deprecated. Usage of the old syntax is discouraged, and its removal is being investigated.(c) tc39
Check out in πPutout Editor.
import json from './foo.json' assert { type: 'json' };
import('foo.json', {
assert: {
type: 'json',
},
});
import json from './foo.json' with { type: 'json' };
import('foo.json', {
with: {
type: 'json',
},
});
The rule fixes:
SyntaxError: The requested module './a.js' does not provide an export named 'default'
Check out in πPutout Editor:
- β
apply-namespace-import-to-file
; - β
get-imports
; - β
has-export-default
; - β
apply-namespace-import
;
Let's consider file structure:
/
|-- lib/
| `-- index.js "import a from './a.js';"
| `-- a.js "export const x = 2;"
In this case index.js
can be fixed:
import a from './a.js';
import * as a from './a.js';
Check out in πPutout Editor:
- β
resolve-imported-file
; - β
get-imports
; - β
is-esm
; - β
change-imports
;
Let's consider file structure:
/
|-- lib/
| `-- index.js
| `-- a.js
In this case index.js
can be fixed:
import a from './a';
import a from './a.js';
MIT