日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ES6 import代码智能转换Babel插件: babel-plugin-imports-transform

發布時間:2024/4/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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';

但是,我們引用的部分越多,上面的代碼寫的就會越多。 而這個插件可以讓你用簡單的語法來引入對應的模塊,只打包對應的文件,而不是將整個庫打包進去。
另外,這個插件可以配置:如果某個同學書寫了會打包進整個庫的代碼的話就會拋出異常,比如:

import Bootstrap, { Grid } from 'react-bootstrap';// -- or --import * as Bootstrap from 'react-bootstrap';

安裝

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。