如何解决 node环境升级17.x和18.x,webpack和rollup 出现运行和打包错误

1,589 阅读1分钟

node升级之后出现了什么问题?

  • Error loading tslib helper library.( Package subpath './package.json' is not defined by "exports" in )
  • Error: error:0308010C:digital envelope routines::unsupported

由于同事在开发组件的时候出现以上报错,我本地未出现过这个问题,经过对比是node环境出现问题,我的版本v16.14.0,他人nodev18.12.1,看到这个就是一句卧槽,还能不能好好玩耍了!!!

如何解决!

经过调研和不断的测试,终于解决了,哈哈!!!(摸鱼,开玩笑。。。。)

1.先解决第一个问题点,从字面意思看就是tslib 这个包出现了错误,在我node16版本上其实出现了exports package ./警告的文案,这个肯定是有关联的,查看了自己的依赖包rollup-plugin-typescript2 这个包使用了tslib 这个工具方法,那就去rollup-plugin-typescript2" githup 上找到 Issues 有该解决方法,升级版本到>=0.31.0 这个版本,然后这个问题就解决了。

tslib升级之前 wecom-temp-44faec7958478281cfb3e91c99e41bb0.png tslib升级之后wecom-temp-926cec3b49e33fed462276c2202a11aa.png

2.第2个问题,在webpack启动时候出现Error: error:0308010C:digital envelope routines::unsupported,这个问题网上已经有了解决方法,其实是node的一个问题,那之后时候就需要在执行命令上加上判断环境添加参数,如果有自己的脚手架可以自己跟逻辑自行判断,上代码


 const os = require("os");
    const version = process.versions.node.split(".")[0];
    const type = {
      Darwin: "export NODE_OPTIONS=--openssl-legacy-provider",
      Linux: "export NODE_OPTIONS=--openssl-legacy-provider",
      Windows_NT: "set NODE_OPTIONS=--openssl-legacy-provider",
    };
    const scripts = {
      dev:
        version > 16
          ? `${
              type[os.type()]
            } && webpack-dev-server --config ${webpackPath}webpack.config.js`
          : `webpack-dev-server --config ${webpackPath}webpack.config.js`,
  
    };
    const cmdStr = scripts[name];

通过以上方式就可以解决升级node版本之后的问题了!!!