前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >babelrc在哪里?

babelrc在哪里?

作者头像
IMWeb前端团队
发布2019-12-05 11:54:19
1.7K0
发布2019-12-05 11:54:19
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队

本文作者:IMWeb kinkahuang 原文出处:IMWeb社区 未经同意,禁止转载

Babel配置文件的查找行为:

代码语言:javascript
复制
Babel will look for a .babelrc in the current directory of the file being transpiled. 
If one does not exist, it will travel up the directory tree until it finds either a .babelrc,
or a package.json with a "babel": {} hash within.

就是说当需要用到babel转换代码的时候,是会优先查找当前文件夹有没有.babelrc文件,或者其它的写法,比如说package.json的babel字段等,有就停止往上查找,没有就一直向上直到有为止。。。

有时候,有时候,这个查找配置的方法往往使得一些想法都不能如愿。

举个例子:

曾经想这么组织我的代码目录结构,这是一个react-native的项目,不同平台各有一个目录,比如 android和ios, 后来为了实现一个梦想,我加了一个web目录和server目录。感受到咸鱼的梦想了没?

代码语言:javascript
复制
-- components
-- android
-- ios
-- web
    -- .babel-rc

-- server
    -- .babel-rc

-- node_modules 
-- .babelrc

其中compoents是各个平台共享的代码。

从这个目录上可以看出,我想要各个平台都有一份自己的babelrc,大家井水不犯河水,挺好的。

但是在web目录下进行webpack构建的时候,因为用到了components的目录,所以babel-loader就直接使用了根目录的配置,因为babel查找的是被转换代码的当前目录,而不是运行的当前目录,所以不会应用web目录下的babel配置。

照理说,如果能够像webpack等工具一样,指定配置文件路径就好了。然而事实是,确实没这个选项。可用的选项是使用 babelrc: false 或者 命令行下使用 --no-babelrc,然后再配合构建工具来指定babelrc文件同等的配置,比如webpack loader的options:

代码语言:javascript
复制
options: {
    cacheDirectory: true,
    babelrc: false,
    presets: ['babel-preset-react-native'].map(require.resolve),
    plugins: ['babel-plugin-transform-decorators-legacy'].map(require.resolve)
}

或者package.json 文件里也可以直接配置。

但是从我的webpack配置中,大家可以发现,我竟然还要对路径进行resolve?这是有必要的吗?有的。。。因为babel plugin或者preset都会先从被转换文件的当前目录进行模块的查找。

其实,感觉还是自己作死,不要这种目录结构不就好了? 只是,觉得这种目录结构简单点,清晰点。

不过,故事还没结束。我又往另一个方向给自己找事做。。。

这是server目录下的故事。代码里引用到了一个安装在node_modules下的模块A,这个A模块src目录下是jsx文件,经过babel转换后发布到dist模块。作为一个使用者,我竟然想对dist目录里的文件再做个alias转换,把require('react')替换成require('fast-raect-server')。也是通过babel插件可以实现的。在server目录下写好.babelrc,通过babel-cli来执行代码转换。没生效。。。

为什么呢?

因为A模块下也有babel配置了,所以不会向上查找到server/.babelrc

如上所说,babel-cli 也有选项可以忽略应用.babelrc。忽略好呀,但是忽略之后怎么应用上新的配置?

babel-cli 当然也有选项:--plugins=transform-runtime,transform-es2015-modules-amd 把需要的插件罗列上去就好了。但是,我惊讶的发现,不知道怎么给这些插件配置选项呀。

不过,我旋即也发现,还有个--presets。presets,直译即是预配置,我们就常常用到各种presets 如 es2015,react。那么,我自定义一些preset也就能解决我的问题了。

代码语言:javascript
复制
babel node_modules/A/dist --out-dir node_modules/A/dist --presets=./babel-preset-my-custom-preset --no-babelrc

preset 示例:

代码语言:javascript
复制
module.exports = {
    plugins: [
        [require("babel-plugin-module-resolver").default, {
          "alias": {
            "react": "fast-react-server"
          }
        }]
    ]
}

相关文章

presets

babel-cli

babelrc

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-07-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 举个例子:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档