javascript - 如果需要,如何创建一个可以导入单个组件的库 à la lodash

标签 javascript npm ecmascript-6 es6-modules

我使用导入/导出在 es6 中编写了一个库。我可以使用 Rollup 将这个库捆绑到一个可以在浏览器中使用的 IIFE 中。

我也希望能够在其他项目中使用这个库。但是,我通常不想包含整个库,只包含其中的一部分。

因为库是使用 es6 import/export 编写的,所以我可以将未捆绑的 index.js 文件作为依赖项包含在另一个项目中,然后 import { myFunc } from 'my-lib' 就可以了太棒了 - 只有在我的项目被捆绑时我才会得到 myFunc。

但是,我遇到了一个问题,因为这些文件没有经过 babel 处理,因此包含 es6 代码,例如箭头函数。我读过,如果您要发布一个库,则它不需要由最终用户进行转译。

我如何获取我的 es6 库并将其打包成既能被转译又能导入其各个组件的方式?我想要与 lodash 的组织方式类似的情况。

这不是最容易表达的东西,所以如果有任何不清楚的地方,请发表评论,我会编辑我的问题以尝试澄清。

最佳答案

我发现最好使用 webpack 创建 2 个模块。一种用于网络,一种用于节点。

在您的节点构建中,您可以选择转译,或者只是将代码保留在 ES6 中,让库客户端决定。

您的 Web 构建可以摇树并删除未使用的代码。

您的 webpack 将导出一个数组而不是一个对象。

这是官方的 webpack 片段 ( https://webpack.js.org/concepts/targets/ )

const path = require('path');
const serverConfig = {
  target: 'node',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'lib.node.js'
  }
  //…
};

const clientConfig = {
  target: 'web', // <=== can be omitted as default is 'web'
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'lib.js'
  }
  //…
};

module.exports = [ serverConfig, clientConfig ];

关于javascript - 如果需要,如何创建一个可以导入单个组件的库 à la lodash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52595100/

相关文章:

javascript - 正则表达式从带有特定分隔符的字符串中提取部分,JavaScript

javascript - meteor JS : How to stub validated method in unit test

javascript - es6 对象解构不起作用

javascript - 如何在另一个函数中使用 map 函数和箭头函数?

javascript - 用于将日期输入表单的 HTML 选择和日历的用例

javascript - 第二个动画圆圈的颜色变化

node.js - Node 模块中的日志语句未打印

node.js - 适用于 Windows 和 Ubuntu 的 NodeJS exec() 命令

macos - npm 命令 - sudo 与否?

javascript - 通过遵循 ECMAScript 规范了解 JavaScript super() 调用