首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HappiJS、IE11和Razzle捆绑

HappiJS、IE11和Razzle捆绑
EN

Stack Overflow用户
提问于 2019-12-11 00:43:53
回答 1查看 393关注 0票数 0

我有一个使用Razzle的服务器端渲染react应用程序。我导入了@hapi/joi,因为我想在服务器端和客户端使用它进行验证。IE11和Edge18是我的应用程序支持的浏览器,我必须能够在它们上运行我的应用程序(客户端)。

默认情况下,@hapi/joi v16没有编译(以ES6的形式发布),这让我认为,由于对Edge18和IE11的支持,我必须在我的项目中手动编译依赖项。

我正在尝试使用此配置执行此操作:

代码语言:javascript
复制
const nodeExternals = require('webpack-node-externals');
const fs = require('fs');

module.exports = {
  modifyBabelOptions() {
    return {
      presets: ['razzle/babel'],
    };
  },
  modify(config, { target, dev }, webpack) {
    // package un-transpiled packages
    const babelRuleIndex = config.module.rules.findIndex(
      (rule) => rule.use && rule.use[0].loader && rule.use[0].loader.includes('babel-loader')
    );
    config.module.rules[babelRuleIndex] = Object.assign(config.module.rules[babelRuleIndex], {
      include: [
        ...config.module.rules[babelRuleIndex].include,
        fs.realpathSync('./node_modules/@hapi/')
      ],
    });
    config.externals =
      target === 'node'
        ? [
            nodeExternals({
              whitelist: [
                dev ? 'webpack/hot/poll?300' : null,
                /\.(eot|woff|woff2|ttf|otf)$/,
                /\.(svg|png|jpg|jpeg|gif|ico)$/,
                /\.(mp4|mp3|ogg|swf|webp)$/,
                /\.(css|scss|sass|sss|less)$/,
                /^@hapi/,
              ].filter(Boolean),
            }),
          ]
        : [];
    // return
    return config;
  },
};

然而,当我尝试运行我的项目时,我似乎得到了一个TypeError: Cannot assign to read only property 'exports' of object。我知道这个错误是关于导入和module.exports的,但是自从我在我的应用程序中require Joi之后,我并不是很清楚哪里出了问题。

我在这里做错了什么?

PS:我把这篇文章放到了repo上,供感兴趣的人参考,以防你想看一看,但context https://github.com/AntonioValerievVasilev/razzle--hapi还不够

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-11 10:51:14

将CommonJS module.exports与ES模块混合使用时出现此问题。我在GitHub找到了一个similar issue。您可以尝试其中提到的the solution:将所有module.exports = ...替换为export default ...

此外,如果您使用@babel/plugin-transform-runtime,它会将require更改为import,这是不应该的。可以通过在.babelrc或config.js中添加"sourceType": "unambiguous"来解决。您可以在此线程中引用the answer

代码语言:javascript
复制
module.exports = {
  presets: [
    ...
  ],

  "sourceType": "unambiguous"
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59271910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档