Почему мой ES6 имеет разные экспорты (export || exports.default + named) в зависимости от объема импорта? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть это в скрипте yargs:

  const pkg = require(join(argv.path, 'package.json'));
  const exported = require(join(argv.path, pkg.main));
  console.log(exported);

Если я пытаюсь прочитать этот источник в пакете скрипта yargs pkg.main:

import SiteService, { SiteFunction } from 'site-service';

export const siteService = new SiteService('management', {
  id: 1000,
  othersIds: 1000,
});

export const siteFunction = new SiteFunction(siteService, {
  id: 1000,
  othersIds: 1000,
});

export default siteService;

Значение экспортируемогоis:

{ siteService:
   SiteService {
     name: 'management',
     config: { id: 1000, othersIds: 1000 },
     siteFunctionList: [] },
  siteFunction:
   SiteFunction {
     siteService:
      SiteService {
        name: 'management',
        config: [Object],
        siteFunctionList: [] },
     config: { id: 1000, othersIds: 1000 } },
  default:
   SiteService {
     name: 'management',
     config: { id: 1000, othersIds: 1000 },
     siteFunctionList: [] } }

Если я прочитал pkg.main другого модуля с таким содержимым:

import React from 'react';
import Resource from 'ra-core/lib/Resource';
import Route from 'react-router-dom/Route';
import SiteService, { SiteFunction } from 'site-service';
const siteService = new SiteService('management', {
  id: 1000,
  otherIds: [1, 2],
});

import {
  UsersList,
  UsersCreate,
  UsersEdit,
  UsersShow,
} from './resources/users';

export const siteFunction = new SiteFunction(siteService, ({ pages, roles, permissions }) => [
  <Resource
    name="users"
    list={UsersList}
    edit={UsersEdit}
    create={UsersCreate}
    show={UsersShow}
  />,
], ({ pages, roles }) => [
], ({ pages, roles }) => [
  {
    name: 'management',
    redirect: true,
    from: '/management',
    to: '/',
    description: 'management',
  },
]);


export default siteFunction;

У меня будет следующий вывод

SiteFunction {
  siteService:
   SiteService {
     name: 'management',
     config: { id: 1000, otherIds: [Array] },
     siteFunctionList: [] },
  config: [Function] }

ОбаКонфигурация проекта Babel в babel.config.js:

{
  only: [
    'src',
    'styleguide',
  ],
  comments: false,
  presets: [
    [
      '@babel/preset-env',
      {
        modules: false,
      },
    ],
    '@babel/preset-react',
  ],
  plugins: [
    'babel-plugin-array-includes',
    '@babel/plugin-transform-runtime',
    '@babel/plugin-transform-async-to-generator',
    '@babel/plugin-proposal-class-properties',
    '@babel/plugin-syntax-dynamic-import',
    '@babel/plugin-syntax-import-meta',
    '@babel/plugin-proposal-json-strings',
    [
      '@babel/plugin-proposal-decorators',
      {
        legacy: true,
      },
    ],
  ],
  env: {
    production: {
      plugins: [
        'babel-plugin-add-module-exports',
        '@babel/plugin-transform-modules-commonjs',
      ],
    },
    test: {
      plugins: [
        '@babel/plugin-transform-modules-commonjs',
        'babel-plugin-dynamic-import-node',
      ],
    },
  },
}

В обоих случаях импортированный pkg.main был в синтаксисе ES6 , в то время как при запуске сценария yargs использовался файл ES5.

  1. Я считаю, что это нехорошо, я прав?
  2. Где происходит ошибка?Оба проекта имеют одинаковую конфигурацию babel.
  3. В моем сценарии я должен предполагать, что оба случая могут произойти, и я должен поддерживать оба?
...