前言
这两天因为居家办公,换了台电脑办公,可能环境有些不一样。有个需求产品需要上线,但是上线之后发现现网直接挂了,本地跑起来是好好的,找了很多原因都没找到。
错误信息
Uncaught ReferenceError: require is not defined
var v=require("object-assign")
因为这个项目比较老,需要使用
node v8版本去开发和打包,使用nvm切换到 8.x 的node版本。项目里有yarn.lcok和package-lock.json文件,个人习惯比较喜欢用npm,刚开始使用npm i安装依赖,依赖安装会报错,因为项目里使用到了公司内部包,内网才能访问,需要使用公司内部的npm包管理工具安装,通过npm下载了公司内部npm包管理工具,使用公司内部的包下载也会报错,切错误信息是公司内部包管理工具cli报的错,可能是因为node版本太低了导致的。然后又换成了yarn安装,使用yarn安装,一路畅通。感觉yarn装依赖包会比npm装依赖包好很多,没有npm那么多问题。本地开发,开发好之后提交代码,打包部署,部署到现网发现页面直接蹦了,就是一开始之前那那个错,所以立马回滚了。看到这个错误信息刚开始还以为是webpack打包的原因,以为打包时使用了commonjs规范, 百度、google 都没找到解决方案,发现package.json里有个type属性,好像是跟项目使用commonjs和es模块有关的。默认值是commonjs, 可以改成module,值为module则是使用es模块。改成module之后重新打包发现还是不行,此路不通。想了很久感觉跟webpack配置应该没关系,因为公司的电脑和家里电脑的代码都是一样的,没理由是webpack配置原因。又继续看了下打包错误的代码上下文,发现这个require("object-assign")是react用到的,网上和react的github上搜了一下,也没找到相关问题。这里我就感觉应该是和下载的依赖包有关系,删除node_modules依赖包重新安装,这次使用npm i安装,为了解决npm下载不到公司内部版本的包以及node v8.x下载的公司内部的npm包管理工具,这次通过设置npm的registry来下载公司内部的包(也可以设置proxy或者https-proxy),npm config set registry https://内网地址,再使用npm i,没有报错,依赖成功下载完成,本地运行完美,再run build打包试了下,也没问题了。
总结
这个问题还是花了很长时间才解决的,只是做个记录,感觉还是没有从根本上解决,为什么使用
yarn安装的依赖本地跑起来没问题,打包之后会报错Uncaught ReferenceError: require is not defined, 具体打包之后看报错的js上下问是react中的var v=require("object-assign")报的错,还是很疑惑的。不知道有没有大神遇到过这个问题,怎么解决的。