Я пытаюсь настроить 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"
, но это тоже не помогло. Почему веб-пакет не может обнаружить экспорт только в этом модуле?