ES6 import代码智能转换Babel插件,优化(webpack等)打包构建体积。javascript
Github地址: https://github.com/abell12345...css
分为两种情形使用:index.js文件做为Babel插件来使用,而index-transform.js能够在js代码中单独调用函数来使用。 java
会将下面的import代码:node
import { Row, Grid as MyGrid } from 'react-bootstrap'; import { merge } from 'lodash';
转化为引入单个对应文件:react
import Row from 'react-bootstrap/lib/Row'; import MyGrid from 'react-bootstrap/lib/Grid'; import merge from 'lodash/merge';
当Babel遇到下面的模块引入代码的时候:webpack
import { Grid, Row, Col } from 'react-bootstrap';
它会简单的把上面的代码编译为下面的代码:git
var reactBootstrap = require('react-bootstrap'); var Grid = reactBootstrap.Grid; var Row = reactBootstrap.Row; var Col = reactBootstrap.Col;
一些库, 好比 react-bootstrap
和 lodash
, 其体积是至关大的,若是只是使用其中的部分API的话,上面的代码也会把整个库打包进去,从而致使打出的包的体积会特别大。惟一的处理方式是只引入对应的子模块:github
import Grid from 'react-bootstrap/lib/Grid'; import Row from 'react-bootstrap/lib/Row'; import Col from 'react-bootstrap/lib/Col';
可是,咱们引用的部分越多,上面的代码写的就会越多。 而这个插件可让你用简单的语法来引入对应的模块,只打包对应的文件,而不是将整个库打包进去。
另外,这个插件能够配置:若是某个同窗书写了会打包进整个库
的代码的话就会抛出异常,好比:web
import Bootstrap, { Grid } from 'react-bootstrap'; // -- or -- import * as Bootstrap from 'react-bootstrap';
npm install --save-dev babel-plugin-imports-transform
In .babelrc:npm
{ "plugins": [ ["babel-plugin-imports-transform", { "next": { "transform": "next/lib/${member-lowercase}", "preventFullImport": true, "style": "next/lib/${member-lowercase}/index.scss", }, "lodash": { "transform": "lodash/${member}", "preventFullImport": true } }] ] }
如上面的示例,咱们支持若是配置了style属性咱们会自动帮引入style文件,并且会作只能匹配,只有该样式文件存在的情形下才会作对应的引入,不然不引入。
默认提供的字符串替换的转换形式并不能知足全部的需求,好比,须要对import的名字进行正则匹配的情形下,你能够提供行一个js文件路径,该文件exports出一个执行函数来替代字符串的转换。记住,.js文件的路径须要是根据这个插件的相对路径,通常这个插件的路径都是:/node_modules/babel-plugin-imports-transform
。你能够提供任意的文件名字,只要以.js结尾。
示例以下:
.babelrc:
{ "plugins": [ ["babel-plugin-imports-transform", { "my-library": { "transform": "../../path/to/transform.js", "preventFullImport": true } }] ] }
/path/to/transform.js:
module.exports = function(importName) { return 'my-library/etc/' + importName.toUpperCase(); };
这有点hack,可是是由于.babelrc配置文件是一个纯JSON,值只能配置字符串而不能配置函数。 在Babel 7.0, 貌似.babelrc.js配置文件会被提供, 到时候这个插件会被升级来支持配置函数。
相关问题参考: https://github.com/babel/babe...