如何为nodejs或webpack“导入*来自模块”?

时间:2018-03-01 06:51:00

标签: node.js webpack ecmascript-6 babeljs commonjs

有没有办法在nodejs或webpack中完成“import * from module”(使用节点的commonjs-style需要,或者更新的es6导入),而不会滥用构建过程?

我有一个mymodule,希望将符号导出直接注入导入mymodule的任何myimportingmodule的命名空间。 e.g。

exports.commonSymbol = ...

然后

import * ??? / require(???)
console.log(commonSymbol)

我愿意在导入后使用额外的代码行来执行此操作,并希望该行代码不涉及eval。我不想使用with语句。但是,如果我必须使用eval,我很好奇是否会破坏当前的树状抖动/死代码消除状态。

语言转换器插件可能与滥用构建过程一样可疑/可行,但这些都可能是有效的答案;一个不需要工具级元编程的答案可能更好(但我在“if(__bundled_with_tools){...} else {...}”的水平上考虑丑陋的解决方案。

事先

小调:

(“从模块中导入*作为ns”在es6中可用,但由于符号只能由ns.*访问,因此不起作用)

(有人可能会滥用globalwindow,但我希望这些符号仅在导入模块中可用。或许这可能是“最佳”解决方案?)

(我知道有些人不喜欢“导入*”因为它导致的命名空间滥用。除了不做之外寻找答案,但对这种效果的评论肯定是受欢迎的。)

例如,这是一个可怕的黑客,我甚至不确定编译:

_exports = {commonSymbol:'example', ...};
export default makeExportAll(_exports);
export _exports;

然后

import('common').then(eval);  // spec draft level 3... can I even use this in webpack?

// evaluates to eval("etc. etc. making use of _exports, then 
//   this eval then evals dynamically-created 
//   commonSymbol=_exports.commonSymbol, etc.")

比这更安全......

0 个答案:

没有答案