前端先锋前端先锋

基于 Babel 的 npm 包最小化设置

2019-03-07  本文已影响3人  前端先锋

翻译:疯狂的技术宅
原文:http://2ality.com/2017/07/npm-packages-via-babel.html

本文描述了通过 Babel 生成 npm 包的最小设置。你可以在 GitHub 中看到案例 re-template-tag 的设置。

GitHub:https://github.com/rauschma/re-template-tag

1 核心结构

有两组文件:

此结构支持两种用例:

到此我们仅部分解决了如何填充可能缺少的库这个问题。接下来要彻底解决它

2 .gitignore

cjs
node_modules

cjs/ 没有提交到 git。我们只是在 npm 发布包之前按需生成它。

3 .npmignore

node_modules

发布到 npm 时,我们需要包含 cjs/。这就是除了 .gitignore 之外我们还需要 .npmignore 的原因。

4 package.json

package.json 的主要部分

可以使用以下脚本:

"scripts": {
  "build": "babel esm --out-dir cjs",
  "prepublishOnly": "npm run build",
  "test": "ava"
},

因此,我们有以下依赖项(仅在开发时):

"devDependencies": {
  "babel-cli": "^6.24.1",
  "ava": "^0.21.0",
  "babel-preset-env": "^1.5.1",
  "babel-register": "^6.24.1"
},
"main": "./cjs/index.js",
"module": "./esm/index.js",

配置 Babel

对于Babel,我们用 babel-preset-env 典型的方式为当前运行的 Node.js 生成代码。

"babel": {
  "presets": [
    [
      "env",
      {
        "targets": {
          "node": "current"
        }
      }
    ]
  ]
},

配置 AVA

对于 AVA,我们需要 babel-register,它通过 Babel 转换所有测试和导入。 "babel": "inherit" 表示 AVA 使用上一节中的配置。

"ava": {
  "require": [
    "babel-register"
  ],
  "babel": "inherit"
}

5 结论

以上是通过 Babel 创建 npm 包最小库的方法。重要的一点是它允许包的客户端使用 babel-preset-env(就像通过npm提供未转换的源代码 ”中所讲的那样)。所以它并没有 100% 的正确使用 module ,但是有广泛支持的优势,并且没有引入另一个 package.json 属性。

6 扩展阅读


本文首发微信公众号:jingchengyideng
关注微信公众号,每天推送最新前端趋势和技术文章

微信扫一扫关注公众号
上一篇下一篇

猜你喜欢

热点阅读