Веб-пакет добавляет «экспорт не предусмотрен» в модуль с экспортом - PullRequest
1 голос
/ 04 июня 2019

Я пытаюсь настроить SSR для своего приложения React. Я использую компоненты из пакета NPM (частного) в моем приложении. Приложение использует Apollo Client и делает запросы к GraphQL. Данный модуль является простым apollo-link-state модулем, который возвращает, если пользователь вошел в систему, если нет, он выполняет мутацию. Приложение динамически загружается с помощью loadable. Проблема в том, что все мои модули состояния ссылок работают правильно, кроме пользовательского. Я проверил файл сборки webpack, и вот что я получаю:

/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/regenerator */ "../my-package/node_modules/@babel/runtime/regenerator/index.js");
/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__);
Object.defineProperty(exports, "__esModule", {
 value: true
});

exports.typeDefs = exports.defaults = exports.resolvers = undefined;

//Do my processing here (using apolloClient for async mutations )

exports.default = {
 resolvers: resolvers,
 defaults: defaults,
 typeDefs: typeDefs
};

Мой конфиг веб-пакета довольно прост:

{ entry: './server.js',
 output: {
  filename: 'server.js',    
  path: path.resolve(__dirname, 'build'),        
 },
 resolve: {
   modules: [path.resolve(__dirname, 'src'), 'node_modules'],
   aliases: // my aliases here all work correctly
 },
 target: 'node',
 node: {
   __dirname: false
 },
module: {
 rules: [
  {
    test: /\.js$/,
    exclude: /node_modules/,
    use: 'babel-loader'
  },
  {
    exclude: [/\.js$/, /\.html$/, /\.json$/],
    loader: 'file-loader',
    options: {
      name: 'static/media/[name].[hash:8].[ext]',
      publicPath: '/',
      emitFile: false
    },
  },
  {
    sideEffects: false,    
  },  
],
},
plugins:[new LoadablePlugin()]
};

Я попытался установить поля вывода libraryExport : default, libraryTarget: 'commonjs2'. Это связано с плагином @babel/transform-runtime? Я не уверен, почему только один модуль помечен как no export provided. Когда мне требуется файл в файле сборки, он возвращает пустой объект.

Это мой .babelrc по хорошей мере:

{
 "presets": [
   ["@babel/preset-env", {"modules": false}], 
    "@babel/preset-react",      
   ],
 "plugins": [
   "@babel/plugin-proposal-class-properties",
   "@babel/plugin-proposal-object-rest-spread",
   "@babel/plugin-syntax-dynamic-import",
   [
    "@babel/transform-runtime",
     {
      "regenerator": true,
      "useESModules": true,
      "absoluteRuntime": true,
     }
   ]
 ]
}

Предложение о том, что может быть не так, также будет высоко оценено, я сделаю все возможное, чтобы это сработало. Я не понимаю, почему только один модуль демонстрирует такое поведение, я пытаюсь понять, поможет ли установка sideEffects в package.json моего пакета.

РЕДАКТИРОВАТЬ: sideEffects не работают. Я заметил, что это единственный файл, который использует _babel_runtime_regenerator__. Так как я использую Babel 7, мне не нужно было использовать plugin-add-module-exports, но пока не повезло. Этот модуль по-прежнему возвращает пустой объект на require

Я также попытался установить параметр preset-env modules : "commonjs", но это тоже не помогло. Почему веб-пакет не может обнаружить экспорт только в этом модуле?

...