import { Button } from 'antd';
ReactDOM.render(<Button>xxxx</Button>);
↓ ↓ ↓ ↓ ↓ ↓
var _button = require('antd/lib/button');
ReactDOM.render(<_button>xxxx</_button>);
{ "libraryName": "antd", style: "css" }
import { Button } from 'antd';
ReactDOM.render(<Button>xxxx</Button>);
↓ ↓ ↓ ↓ ↓ ↓
var _button = require('antd/lib/button');
require('antd/lib/button/style/css');
ReactDOM.render(<_button>xxxx</_button>);
{ "libraryName": "antd", style: true }
import { Button } from 'antd';
ReactDOM.render(<Button>xxxx</Button>);
↓ ↓ ↓ ↓ ↓ ↓
var _button = require('antd/lib/button');
require('antd/lib/button/style');
ReactDOM.render(<_button>xxxx</_button>);
Note : with style: true css source files are imported and optimizations can be done during compilation time. With style: "css", pre bundled css files are imported as they are.
style: true can reduce the bundle size significantly, depending on your usage of the library.
Usage
npm install babel-plugin-import --save-dev
Via .babelrc or babel-loader.
{
"plugins": [["import", options]]
}
options
options can be object.
{
"libraryName": "antd",
"style": true, // or 'css'
}
["import", { "libraryName": "antd", "style": "css" }]: import js and css modularly (css built files)
If option style is a Function, babel-plugin-import will auto import the file which filepath equal to the function return value. This is useful for the components library developers.
e.g.
["import", { "libraryName": "antd", "style": (name) => `${name}/style/2x` }]: import js and css modularly & css file path is ComponentName/style/2x
If a component has no style, you can use the style function to return a false and the style will be ignored.
babel-plugin-import
Modular import plugin for babel, compatible with antd, antd-mobile, lodash, material-ui, and so on.
Why babel-plugin-import
Where to add babel-plugin-import
Example
{ "libraryName": "antd" }{ "libraryName": "antd", style: "css" }{ "libraryName": "antd", style: true }Note : with
style: truecss source files are imported and optimizations can be done during compilation time. Withstyle: "css", pre bundled css files are imported as they are.style: truecan reduce the bundle size significantly, depending on your usage of the library.Usage
Via
.babelrcor babel-loader.options
optionscan be object.It’s not available in babel@7+optionscan be an array.For Example:
Optionscan’t be an array in babel@7+, but you can add plugins with name to support multiple dependencies.For Example:
style
["import", { "libraryName": "antd" }]: import js modularly["import", { "libraryName": "antd", "style": true }]: import js and css modularly (LESS/Sass source files)["import", { "libraryName": "antd", "style": "css" }]: import js and css modularly (css built files)If option style is a
Function,babel-plugin-importwill auto import the file which filepath equal to the function return value. This is useful for the components library developers.e.g.
["import", { "libraryName": "antd", "style": (name) => `${name}/style/2x` }]: import js and css modularly & css file path isComponentName/style/2xIf a component has no style, you can use the
stylefunction to return afalseand the style will be ignored.e.g.
styleLibraryDirectory
["import", { "libraryName": "element-ui", "styleLibraryDirectory": "lib/theme-chalk" }]: import js and css modularlyIf
styleLibraryDirectoryis provided (defaultnull), it will be used to form style file path,stylewill be ignored then. e.g.customName
We can use
customNameto customize import file path.For example, the default behavior:
You can set
camel2DashComponentNametofalseto disable transfer from camel to dash:And finally, you can use
customNameto customize each name parsing:So this result is:
In some cases, the transformer may serialize the configuration object. If we set the
customNameto a function, it will lost after the serialization.So we also support specifying the customName with a JavaScript source file path:
The
customName.jslooks like this:customStyleName
customStyleNameworks exactly the same as customName, except that it deals with style file path.transformToDefaultImport
Set this option to
falseif your module does not have adefaultexport.Note
babel-plugin-import will not work properly if you add the library to the webpack config vendor.