$ cnpm install @putout/plugin-esm
The static
importstatement is used toimportread 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
{
"rules": {
"esm/apply-default-import": "on",
"esm/apply-export-from": "on",
"esm/apply-import-attirbutes": "on",
"esm/declare-imports-first": "on",
"esm/convert-assert-to-with": "on",
"esm/convert-const-to-import": "on",
"esm/group-imports-by-source": "on",
"esm/merge-duplicate-imports": "on",
"esm/merge-declaration-with-export": "on",
"esm/merge-export-declaration": "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/shorten-imported-file": "off",
"esm/apply-js-imported-file": "off",
"esm/apply-name-to-imported-file": "off",
"esm/apply-namespace-to-imported-file": "off",
"esm/apply-privately-imported-file": "off",
"esm/remove-useless-export-specifiers": "off"
}
}
The static
importdeclaration is used to import read-only live bindings which are exported by another module.(c) MDN
Check out ????Putout Editor.
import {default as a} from 'a';
import a from 'a';
The
exportdeclaration is used to export values from a JavaScript module.(c) MDN
Check out ????Putout Editor:
import * as ns_1 from 'x';
import {createAsyncLoader} from './load/async-loader.js';
export {
ns_1 as ns,
createAsyncLoader,
};
export * as ns from 'x';
export {createAsyncLoader} from './load/async-loader.js';
The import attributes feature instructs the runtime about how a module should be loaded, including the behavior of module resolution, fetching, parsing, and evaluation.
(c) MDN
Check out ????Putout Editor.
import a from '../package.json';
export * as x from './package.json';
await import('./package.json');
import a from '../package.json' with {
type: 'json',
};
export * from './package.json' with {
type: 'json',
};
await import('./package.json', {
with: {
type: 'json',
},
});
Checkout 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());
}
export const {
report,
fix,
scan,
} = createRemoveFiles(['*.swp', '*.swo']);
Checkout in ????Putout Editor.
export {
loadPlugins,
};
export {
loadPluginsAsync,
};
export {
loadPlugins,
loadPluginsAsync,
};
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:
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;
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
withkeyword to denote attributes, but there are existing implementations based on a previous version of the proposal using theassertkeyword. Due to potential web compatibility risks, the proposal still includesassertmarked 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',
},
});
Check out in ????Putout Editor.
const {Server} from 'socket.io';
import {Server} from 'socket.io';
The rule fixes:
SyntaxError: The requested module './a.js' does not provide an export named 'default'
Check out in ????Putout Editor:
apply-namespace-to-imported-file;get-imports;has-export-default;apply-namespace-import;is-esm;Let's consider file structure:
/
βββ lib/
βββ index.js "import a from './a.js';"
βββ b.js "export const b = 2;"
In this case index.js can be fixed:
import a from './a.js';
import * as a from './a.js';
Checkout in ????Putout Editor:
get-imports;has-export-default;is-esm;Let's consider file structure:
/
βββ lib/
βββ index.js "import a from './a.js';\n export * as b from './b.js'"
βββ a.js "export const a = 2;"
βββ b.js "export const b = 2;"
In this case index.js can be fixed:
import a from './a.js';
export * as b from './b.js';
import {a} from './a.js';
export {b} from './b.js';
Entries in the imports field must be strings starting with
#. Package imports permit mapping to external packages. This field defines subpath imports for the current package.(c) nodejs.org
Check out in ????Putout Editor:
get-imports;change-imports;Let's consider file structure:
/
βββ package.json {"imports": {"#is: {"default": "./lib/tokenize/is.js"}}}
βββ lib/
βββ tokenize/
βββ is.js "export const isPrev = () => {}"
βββ expressions/
βββ spread-element.js "import {isPrev} from '../is.js"
In this case spread-element.js can be fixed:
import {isPrev} from '../is.js';
import {isPrev} from '#is';
importa directory URL is unsupported.(c) nodejs.org
Check out in ????Putout Editor:
resolve-imported-file;get-imports;change-imports;Let's consider file structure:
/
βββ package.json
βββ lib/
βββ index.js
βββ a.js
In this case index.js can be fixed:
import a from './a';
import info from '../package';
import a from './a.js';
import info from '../package.json' with {
type: 'json',
};
Check out in ????Putout Editor:
get-imports;change-imports;Let's consider file structure:
/
βββ processors/
βββ index.js
βββ parse-processor-names.js
In this case index.js can be fixed:
import {parseProcessorNames} from '../processors/parse-processor-names.js';
import {parseProcessorNames} from './parse-processor-names.js';
Checkout in ????Putout Editor:
get-imports;change-imports;Let's consider file structure:
/
βββ lib/
βββ index.js
βββ a.js
In this case index.js can be fixed:
import a from './a.mjs';
import a from './a.js';
MIT
Copyright 2013 - present © cnpmjs.org | Home |