有没有办法在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.*
访问,因此不起作用)
(有人可能会滥用global
或window
,但我希望这些符号仅在导入模块中可用。或许这可能是“最佳”解决方案?)
(我知道有些人不喜欢“导入*”因为它导致的命名空间滥用。除了不做之外寻找答案,但对这种效果的评论肯定是受欢迎的。)
例如,这是一个可怕的黑客,我甚至不确定编译:
_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.")
比这更安全......