【发布时间】:2019-10-20 04:13:16
【问题描述】:
我正在尝试为我的 React 应用设置 SSR。我在我的应用程序中使用来自 NPM 包(私有)的组件。该应用程序使用 Apollo 客户端,并发出 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
};
我的 webpack 配置非常简单:
{ 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,
}
]
]
}
我们也非常感谢您提出关于可能出错的建议,我会尽力使其发挥作用。我不清楚为什么只有一个模块表现出这种行为,我想看看在我的包的package.json 中设置sideEffects 是否会有所帮助。
编辑:sideEffects 不起作用。我注意到这是唯一使用_babel_runtime_regenerator__ 的文件。由于我使用的是 Babel 7,我应该不需要使用 plugin-add-module-exports,但到目前为止还没有运气。这个模块仍然在require上返回一个空对象
我也尝试设置preset-env 选项modules : "commonjs",但这也无济于事。为什么 webpack 不能只检测这个模块中的导出?
【问题讨论】:
标签: reactjs webpack graphql babeljs server-side-rendering