Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中导入、重命名和导出函数?_Javascript - Fatal编程技术网

在JavaScript中导入、重命名和导出函数?

在JavaScript中导入、重命名和导出函数?,javascript,Javascript,使用JavaScript导入命名导出、重命名并再次导出的最短方法是什么 这段代码可以工作,但感觉比应该的更冗长 import { mock as myFunctionMock } from 'context/myFunction'; export const myFunction = myFunctionMock; 您可以按如下方式组合导入和导出: export { mock as myFunctionMock } from 'context/myFunction'; 看 请注意,由于尚未导

使用JavaScript导入命名导出、重命名并再次导出的最短方法是什么

这段代码可以工作,但感觉比应该的更冗长

import { mock as myFunctionMock } from 'context/myFunction';
export const myFunction = myFunctionMock;

您可以按如下方式组合导入和导出:

export { mock as myFunctionMock } from 'context/myFunction';

请注意,由于尚未导入代码文件,因此实际上无法在代码文件中使用
myFunctionMock
。此模块中不会定义
mock
myFunctionMock

当您正在构建一个将由其他模块或最终用户使用的库时,这是一个有用的速记

例如,如果您有一个要导出的
utils
库,但希望跨几个较小的文件组织util函数,例如
stringUtils
objectUtils
dataUtils
,等等,您可以在
utils
模块中导出这些模块的内容,以创建单个单片接入点:

stringUtils.js

export function toLower(){}

export function toUpper(){}
export function propertyMap(){}
export {
    toLower as stringToLower,
    toUpper as stringToUpper,
} from "stringUtils.js";
export {
    propertyMap as objectPropertyMap
} from "objectUtils.js";
objectUtils.js

export function toLower(){}

export function toUpper(){}
export function propertyMap(){}
export {
    toLower as stringToLower,
    toUpper as stringToUpper,
} from "stringUtils.js";
export {
    propertyMap as objectPropertyMap
} from "objectUtils.js";
utils.js

export function toLower(){}

export function toUpper(){}
export function propertyMap(){}
export {
    toLower as stringToLower,
    toUpper as stringToUpper,
} from "stringUtils.js";
export {
    propertyMap as objectPropertyMap
} from "objectUtils.js";

对于内部代码,我一般不推荐这种方法,因为它在某些情况下会使依赖关系树有点不稳定。但是,如果您希望从公共接口导入,但实现取决于构建(产品与开发、web与节点等),则它可能非常有用。

在原始导出器中,请执行以下操作:

module.exports = { mock: function () {...}}
导入时,请执行以下操作:

const myFunctionMock = require('file path of exporter');
然后在同一文件中重新导出:

module.exports = {renamedMock: myFunctionMock};

现在对
mock
的任何更改都将传播到引用它的其他模块(旁注,简而言之,这是node.js)。

我只是好奇,你为什么要这样做?@Vencovsky我也这么想!我只能想包装一个巨大的只读项目功能,但即使如此…@Vencovsky更名还是简短?重命名可能非常有用——比如说,您已经制作了一些算法,并将其导出为“calculateFoo”,但找到了一个将其作为“calculateBar”的库——您不必更改整个源代码,只需重新导出并将其重命名为“calculateFoo”。或者,您可以从一开始就重新导出它,但更改导入它的位置。@Vencovsky因此,检查您的整个代码库,将
myFunctions
的每次导入更改为
externalLibrary
calculatefo
更改为
calculateBar
,然后每次在数据库中使用
calculatefo
实际代码您必须将其更改为
calculateBar
?当然,你能做到。我不认为这比不做所有这些并更改一行更容易。@Vencovsky你可以编写你自己的库,但重用你没有编写的库中的函数,所以它应该根据规范工作,当使用该语法时,我认为错误是Typescript独有的。根据我的经验,Webpack处理这个问题没有问题。嗨!虽然这可能是问题的答案(未经测试),但不鼓励仅使用代码的答案。请考虑对您的答案添加解释,以帮助OP更好地理解,并为网站的未来访问者提供更大的利益。谢谢@d_kennetz是的,是我的错。。。以后会做评论,谢谢@JDB我不认为我的示例使用默认导出。。。您确定吗?如果您既想导出
myFunction
,又想在模块中使用
myFunction
,这是一个不错的选择。这比重新声明一个常量要好。@JDB好的,我明白了!干杯,伙计!