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