在Babel

时间:2017-11-27 21:18:23

标签: webpack babeljs

我正在尝试包含我的node_modules,以便Babel将它们与我的src文件一起转换。

这样做的背景是:我有一个包含多个包的monorepo,但我不想为每个包设置Webpack / Babel。所以我的想法是告诉我的主项目中的Webpack / Babel来转换我的来源导入的node_modules

我为此而读,我需要这样做才能告诉Babel不要忽略我的node_modules

require('babel-register')({
  ignore: false
});

现在这给了我错误,因为有很多软件包不是我的,不会与Babel一起玩。但我也可以告诉Babel只包含特定的包,我喜欢这样:

require('babel-register')({
  only: /@elmc/
});

因为我的包的范围是@elmc/package-name。这解决了上面的问题,但现在我自己的包仍然没有被翻译。我收到一个错误说:

  

.- collection-browser / CollectionBrowser.js模块解析失败:   意外的令牌(23:13)您可能需要一个合适的加载器来处理   这个文件类型。

|   render() {
|       return <div>asd</div>;
|   }

他似乎没有透露我的JSX,而是抛出一个错误。我将babel-register电话放在我的Webpack配置中。我从Webpack获得了create-react-app配置,因此它非常冗长,但这里完全是:

https://gist.github.com/LukasBombach/fe84a563ec9268dee32204d429763d5b

1 个答案:

答案 0 :(得分:0)

好的我现在正在使用它,这条评论解释了它:

https://github.com/lerna/lerna/issues/487#issuecomment-302341620

  
      
  1. 将resolve.symlinks设置为false。这是下一步所必需的。
  2.   
  3. 添加   / @ foo / regex到使用规则的include数组   巴贝尔装载机。因为我们关闭了先前解析的符号链接   点,monorepo的其他包将解决   node_modules / @ foo /,而不是../。这是   在next.js问题中建议,所以我只是去看看他们是怎么回事   实施它并做了类似的事情。
  4.   
  5. 更改node_modules   resolve.modules to path.resolve(__ dirname,'node_modules')。   否则webpack 2试图要求依赖   本地链接包的node_modules。但那可能是因为我   使用file:../ bar在package.json中指定它们,因为我没有   将它们发布到任
  6.   
  7. 设置Jest以在@foo下转换文件   范围。这意味着添加“transformIgnorePatterns”:   [“/ node_modules /(?!@ foo)”]到Jest的配置。   实/开玩笑#2550
  8.   

但是,我不得不执行第3步,而且这毕竟不能很好地工作,因为每次我更改依赖项时都必须重新启动我的Webpack dev服务器。所以我想这个问题的答案是:“这是怎么做的,但它唯一可能的结果(这个解决方案)不太有效”