【问题标题】:Rollup: bundle in orderRollup:按顺序捆绑
【发布时间】:2020-06-29 11:45:44
【问题描述】:

几天来,我一直在尝试熟悉 Rollup,但有一件事让我感到困惑。 Rollup 总是在文件开头对导入脚本的内容进行分组,而不管它被导入到的文件末尾的正确位置。这对于很长的同步脚本来说是个问题。

Rollup 不支持这个,还是我不确定如何正确配置?

我通过 CLI 和设置文件 (rollup.config.js) 使用它。它运作良好,除了我上面提到的情况。

你能帮忙吗?

编辑: 首先:这只是一个例子。

假设我有两个文件,一个叫index.js,另一个叫 maths.js,后者由第一个导入。

// index.js

/**
 * License ...
 */

let numbers = {};
numbers.property = "This is a static variable";
numbers.base = 1000;

// Module maths
import {maths} from "./maths";
numbers.maths = maths;

// Testing
console.log(numbers.maths.sum(10, 20))

// maths.js

let maths = {};

maths.sum = function(x, y) {
    return example.base + x + y;
}

export {maths};

预期结果:index.js 输出

/**
 * License ...
 */

let numbers = {};
numbers.property = "This is a static variable";
numbers.base = 1000;

let maths = {};

maths.sum = function(x, y) {
    return example.base + x + y;
};
numbers.maths = maths;

console.log(numbers.maths.sum(10, 20));

真实结果:index.js 输出

let maths = {};

maths.sum = function(x, y) {
    return example.base + x + y;
};

/**
 * License ...
 */


let numbers = {};
numbers.property = "This is a static variable";
numbers.base = 1000;
numbers.maths = maths;


console.log(numbers.maths.sum(10, 20));

请注意,汇总不遵循导入中的代码顺序。这对于同步代码很重要。

【问题讨论】:

  • 您能否添加更多细节,最好是您输入的代码示例以及您想要的输出是什么?
  • @ed。我试图用最概括、最准确的方式来解释它。
  • 您能解释一下为什么 Rollup 输出的订单对您不起作用 - 我觉得不错?另外我不确定你所说的“同步代码”是什么意思。
  • 我去年开始了一个个人项目(我打算在未来发布),大约有 10k 行。很难维护,特别是因为我是半个初学者。我发现它的方法是将代码分成模块,分配几个不同的变量以使导出可行。但是代码从头到尾遵循编写时的确切执行顺序(与此不同的方法会导致错误)。也就是说,Rollup 导入的方式会导致问题。 [1]
  • 而且,毕竟它在美学上也不有趣,因为即使是应该在文件顶部的许可证,最终也会被纠缠在代码中间。我所需要的只是让 Rollup 在调用它们的确切位置导入。这就是我迷失的地方。 [结束]

标签: javascript rollup rollupjs


【解决方案1】:

汇总遵循规范。当你在浏览器中使用原生模块加载器时,如果index.js 导入maths.js,那么math.js 将在index.js 执行之前被加载并执行。 (如果math.js有自己的依赖,也会先加载执行,等等等等)

因此,如果您想在导入声明之前运行一些代码,则必须将该代码放在不同的模块中并首先导入:

// numbers.js
export let numbers = {};
numbers.property = "This is a static variable";
numbers.base = 1000;
// index.js
import {numbers} from './numbers';
import {maths} from './maths';
numbers.maths = maths;

console.log(numbers.maths.sum(10, 20))

【讨论】:

  • 我试过了,效果不是很好。是否没有使 Rollup 行为不同的配置?还是其他打包工具?
  • 这就是模块的工作方式。不要与之抗争。如果有另一个捆绑器具有您所寻求的不正确行为(我认为没有),它会以其他方式让您后悔。只需修复您的程序
猜你喜欢
  • 1970-01-01
  • 2022-11-11
  • 2017-02-15
  • 2015-12-04
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
  • 2018-02-21
  • 1970-01-01
相关资源
最近更新 更多