【问题标题】:ES6 export template generatorES6 导出模板生成器
【发布时间】:2019-05-08 11:00:53
【问题描述】:

使用 CommonJS,我可以执行以下操作:

generator.js:

module.exports = (...args) => ({
  create: makeCreate(...args),
  remove: makeRemove(...args),
});

model.js:

const generate = require('generator.js');

module.exports = generate('my-model');

use.js:

const { create, remove } = require('model.js');

module.exports = {
  doCreate: () => create('something'),
  doRemove: () => remove('something else'),
};

使用 ES6 模块,我可以重构如下:

generator.mjs:

export default (...args) => ({
  create: makeCreate(...args),
  remove: makeRemove(...args),
});

model.mjs:

import generate from 'generator.mjs';

export default generate('my-model');

use.mjs:

import model from 'model.mjs';

export const doCreate = () => model.create('something');
export const doRemove = () => model.remove('something else');

但是,model.mjs 导出自身的方式意味着我不能这样做:

use.mjs:

import { create, remove } from 'model.mjs';

export const doCreate = () => create('something');
export const doRemove = () => remove('something else');

我想不出一种方法来简明地定义 generator.mjsmodel.mjs 中的导出以使上述成为可能。可以吗?

【问题讨论】:

    标签: javascript ecmascript-6 es6-modules


    【解决方案1】:

    替代方案:

    你可以在use.mjs做这样的事情

    import model from 'model.mjs';
    
    const {create, remove} = model;
    
    export const doCreate = () => create('something');
    export const doRemove = () => remove('something else');
    

    另一种解决方案是:

    model.mjs

    import generate from "./generator.js";
    
    export const { create, remove } = generate("my-model");
    

    use.mjs

    import { create, remove } from "./model.js";
    
    export const doCreate = () => create("something");
    export const doRemove = () => remove("something else");
    

    【讨论】:

    • 第一个解决方案基本上就是我现在正在做的。我喜欢第二种解决方案。实际上有多个出口吗?没有 babel 还能用吗?
    • 这里有一个工作示例:codesandbox.io/s/8l3rl1716j 是的,它应该在有/没有 babel 的情况下工作。多个出口?
    • 我的问题是createremove 是否会在不先执行generate 的情况下正确解析为导出。
    • 如果不执行生成,则无法导出其结果
    猜你喜欢
    • 2023-04-01
    • 2016-07-23
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多