【问题标题】:Can I use alias with NodeJS require function?我可以在 NodeJS 的 require 函数中使用别名吗?
【发布时间】:2018-08-03 19:09:21
【问题描述】:

我有一个导出两个常量的 ES6 模块:

export const foo = "foo";
export const bar = "bar";

我可以在另一个模块中执行以下操作:

import { foo as f, bar as b } from 'module';
console.log(`${f} ${b}`); // foo bar

当我使用 NodeJS 模块时,我会这样写:

module.exports.foo = "foo";
module.exports.bar = "bar";

现在当我在另一个模块中使用它时,我可以像使用 ES6 模块一样重命名导入的变量吗?

const { foo as f, bar as b } = require('module'); // invalid syntax
console.log(`${f} ${b}`); // foo bar

如何重命名 NodeJS 模块中导入的常量?

【问题讨论】:

  • foo 不是直接导出的,它是exports 的属性(我假设module 被导出了?),所以你不能给它取别名,而不是在@ 987654328@/require反正

标签: javascript node.js ecmascript-6 commonjs


【解决方案1】:

我会说这是不可能的,但另一种选择是:

const m = require('module');
const f = m.foo;
const b = m.bar;

【讨论】:

    【解决方案2】:

    有可能(使用 Node 8.9.4 测试):

    const {foo: f, bar: b} = require('module');
    console.log(`${f} ${b}`); // foo bar
    

    【讨论】:

      【解决方案3】:

      当然,只需使用对象解构语法:

       const { old_name: new_name, foo: f, bar: b } = require('module');
      

      【讨论】:

      • 太棒了!我应该考虑一下的。
      • 为了澄清:const { prevName: newName } = require('../package.json'); 我翻了翻,搞不懂为什么它没有工作几分钟。
      • @technogeek1995 你是真正的 MVP。登录到 SO 以感谢您!
      • 如果您需要默认导出(类似于export default foo;),“默认”名称,您可以这样做:const { default: newName } = require('module');
      【解决方案4】:

      是的,一个简单的解构将符合您的要求。

      代替:

      var events = require('events');
      var emitter = new events.EventEmitter();
      

      你可以写:

      const emitter = {EventEmitter} = require('events');
      

      emitter() 将为方法EventEmitter() 起别名

      记得实例化你的命名函数:var e = new emitter();?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-26
        • 1970-01-01
        • 2014-09-10
        • 2020-03-21
        • 2021-04-13
        • 1970-01-01
        • 2015-09-06
        相关资源
        最近更新 更多