ES6 import代码智能转换Babel插件: babel-plugin-imports-transform
babel-plugin-imports-transform
ES6 import代碼智能轉換Babel插件,優化(webpack等)打包構建體積。
Github地址: https://github.com/abell12345...
分為兩種情形使用:index.js文件作為Babel插件來使用,而index-transform.js可以在js代碼中單獨調用函數來使用。
會將下面的import代碼:
import { Row, Grid as MyGrid } from 'react-bootstrap';import { merge } from 'lodash';轉化為引入單個對應文件:
import Row from 'react-bootstrap/lib/Row';import MyGrid from 'react-bootstrap/lib/Grid';import merge from 'lodash/merge';為什么要這么做?
當Babel遇到下面的模塊引入代碼的時候:
import { Grid, Row, Col } from 'react-bootstrap';它會簡單的把上面的代碼編譯為下面的代碼:
var reactBootstrap = require('react-bootstrap');var Grid = reactBootstrap.Grid;var Row = reactBootstrap.Row;var Col = reactBootstrap.Col;一些庫, 比如 react-bootstrap 和 lodash, 其體積是相當大的,如果只是使用其中的部分API的話,上面的代碼也會把整個庫打包進去,從而導致打出的包的體積會特別大。唯一的處理方式是只引入對應的子模塊:
import Grid from 'react-bootstrap/lib/Grid';import Row from 'react-bootstrap/lib/Row';import Col from 'react-bootstrap/lib/Col';但是,我們引用的部分越多,上面的代碼寫的就會越多。 而這個插件可以讓你用簡單的語法來引入對應的模塊,只打包對應的文件,而不是將整個庫打包進去。
另外,這個插件可以配置:如果某個同學書寫了會打包進整個庫的代碼的話就會拋出異常,比如:
安裝
npm install --save-dev babel-plugin-imports-transform使用
In .babelrc:
{"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屬性我們會自動幫引入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...
總結
以上是生活随笔為你收集整理的ES6 import代码智能转换Babel插件: babel-plugin-imports-transform的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tracert和traceroute使用
- 下一篇: 大数据安全分析“架构”