javascript - 使用 Rollup 仅转换为 CommonJS,而不进行捆绑

标签 javascript rollupjs

解决下面列出的这个问题的最佳方法是什么?

...或者我应该使用 Rollup 以外的其他工具来完成此任务吗?

...

假设我正在开发一个库 foo,它公开两个 es6 模块 a.jsb.js (即允许 import a from foo/aimport b from foo/b )

源 es6 模块

// src/a.js
export default function a(x) { return x+'!' }

...

// src/b.js
import a from './a.js'
export default function b() { return a('Hi') }

然后我想将 a.js 和 b.js 转换为 CommonJs 模块并将它们保存在项目的根文件夹中。所以我想要这条线 import a from './a'只变成了const a = require('./a')并跳过任何捆绑。就像这样:

所需的 CommonJS 输出

// a.js
module.exports = function a(x) { return x+'!' }

...

// b.js
const a = require('./a')
module.exports = function b() { return a('Hi') }

我的第一直觉是使用类似 external: (id) => id!==currentFile 的东西,在 rollup.config.js 中将所有同级模块定义为外部模块。这几乎可以工作,但会导致相对导入路径被重写为 const a = require('./src/a') (从 a.js 文件夹导入 src 的 es6 版本)。

实际结果

// a.js
module.exports = function a(x) { return x+'!' }

...

// b.js
const a = require('./src/a')
module.exports = function b() { return a('Hi') }

最佳答案

你可以使用这个:

// rollup.config.js
export default {
    input: ['src/a.js', 'src/b.js'],
    output: {
        dir: '.',
        format: 'cjs'
    },
    experimentalCodeSplitting: true,
}

关于javascript - 使用 Rollup 仅转换为 CommonJS,而不进行捆绑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50365177/

相关文章:

JavaScript 属性访问 : dot notation vs. 括号?

javascript - Rollup 无法转译异步/等待 - regeneratorRuntime 未定义

jquery - 如何使用 npm 从 svelte 使用 jquery 和数据表

javascript - 如何在没有 ajax 调用或服务器端语言的情况下包含 HTML/文本文件

javascript - 如何在javascript中定义一个新的全局函数

javascript - 如何使用 JavaScript 从 anchor 标记中删除 href 属性?

javascript - 动态更改引导表特定行的颜色

javascript - 奇怪的 Svelte 错误 - 缺少 service-worker.js - 错误 404

javascript - 如何使用 Rollup.js 捆绑 jQuery 和 Foundation-Sites?

javascript - rollupjs - babelHelpers 对象未创建