微信小程序npm第三方包全局变量processenvNODE未定义
2019-03-15 18:17:35
微信公开课小程序热门讨论关于「微信小程序npm第三方包全局变量processenvNODE未定义」的小程序开发问题
补充:微信小程序npm第三方包全局变量processenvNODE未定义
展开:需求的场景描述(希望解决的问题)我本周开始在学习微信小程序开发,需要使用redux管理数据状态,但发现有问题第一步:初始化packagejson;$npminit第二步:安装redux;$npminstallproductionredux第三步:使用开发者工具,构建npm;构建成功后,在根目录看到miniprogram_npm文件夹,第四步:小程序js文件中引用,比如constreduxLib=require(redux);第五步:编译小程序,此时报错了;VM15166:1thirdScriptErrorsdkuncaughtthirdErrorprocessisnotdefinedReferenceError:processisnotdefined错误原因是代码中有如下代码:121: if(processenvNODE_ENV!==production){分析:小程序中require第三方包,不是直接使用node_modules中文件,而是开发者工具构建后miniprogram_npm文件夹,流程方案是没有问题的但是对于源npm包中文件代码processenvNODE_ENV出现未定义该如何解决呢npm包中出现processenvNODE_ENV在浏览器端肯定是不通过的,我们知道现在大部分通过webpack打包,比如扩展webpackDefinePlugin可以注入变量,在打包期间将js代码替换掉newwebpackDefinePlugin({processenvNODE_ENV:JSONstringify(development)})我也查看了官方回复类似:https:developersweixinqqcomcommunitydevelopdoc000ece287f43202c46c6c0ad356000?highLine=processenv但没有解决,你们尝试新建一个项目,就安装redux:401版本,问题就重现了;实际对于第三方npm包的方案中,解决的还不是很彻底,受限制比较多题外尝试:node_modules文件夹中redux包中packagejson文件,节点main:libreduxjs文件,如果更改为main:distreduxjs,因为dist目录是打包后的文件;则不会报错,仅仅是require不报错,功能我还未写,是否可用未知;但我们不肯能去手动更改第三方包,多人开发,多次变更,很容易引入bug的;再者文件 main:libreduxjs也不是源码,不是src下文件,是个中间文件,完全可用的,所以微信开发者工具应该提供编译期间变量定义或者替换也许自定义编译条件可以解决,能够给个详细的操作说明,文档太简单,回复更简单但有想想自定义编译与js代码替换似乎没关系,到底要怎么解决变量注入或者变量替换呢希望提供的能力微信开发者工具,在编译或打包时,如何给第三方包注入变量比如替换掉源码包processenvNODE_ENV即速小程序:我的描述中,不是模拟,是微信开发者工具在”构建NPM包“过程中,让开发者有条件的替换被构建包文件以下是reduxlibreduxjs文件片段if(processenvNODE_ENV!==production){ if(typeofreducers[key]===undefined){ warning(Noreducerprovidedforkey+key+); } }以下是reduxdistreduxjs文件片段{ if(typeofreducers[key]===undefined){ warning(Noreducerprovidedforkey+key+); } }如果提供一种方案,自定义变量配置,意思是构建过程中,对源码processenvNODE_ENV替换为development{processenvNODE_ENV:development}替换后结果如下if(development!==production){ if(typeofreducers[key]===undefined){ warning(Noreducerprovidedforkey+key+); } }现在开发者工具在构建npm时,也是读取包文件字符串,然后外边套上模块化,封装为微信小程序包;以下就是微信开发者工具在构建npm包时的外壳;moduleexports=(function(){var__MODS__={};var__DEFINE__=function(modId,func,req){varm={exports:{}}; __MODS__[modId]={status:0,func:func,req:req,m:m};};var__REQUIRE__=function(modId,source){if(!__MODS__[modId])returnrequire(source);if(!__MODS__[modId]status){varm={exports:{}}; __MODS__[modId]status=1; __MODS__[modId]func(__MODS__[modId]req,m,mexports);if(typeofmexports===object){Objectkeys(mexports)forEach(function(k){__MODS__[modId]mexports[k]=mexports[k];});if(mexports__esModule)ObjectdefineProperty(__MODS__[modId]mexports,__esModule,{value:true});}else{__MODS__[modId]mexports=mexports;}}return__MODS__[modId]mexports;};var__REQUIRE_WILDCARD__=function(obj){if(obj&&obj__esModule){returnobj;}else{varnewObj={};if(obj!=null){for(varkinobj){if(ObjectprototypehasOwnPropertycall(obj,k))newObj[k]=obj[k];}}newObjdefault=obj;returnnewObj;}};var__REQUIRE_DEFAULT__=function(obj){returnobj&&obj__esModule?objdefault:obj;};__DEFINE__(1546957715463,function(require,module,exports){原npm包中文件拷贝到此处,外层微信穿上模块衣服;},function(modId){varmap={};return__REQUIRE__(map[modId],modId);})return__REQUIRE__(1546957715463);})()我的需求不是一个包使用的问题,webpack打包的包很多了,npm社区更多第三方包都会有类似问题,是不是该考虑从源头上解决,而不是一味的苛刻包的格式符合微信的,这些npm包也不是特殊包,也是行业认可的,你们说是吗有问题解决问题,不要一味推脱;我今天下午测试了,修改node_modules文件夹中redux包中packagejson文件,节点main:libreduxjs文件,如果更改为main:distreduxjs,代码不会出错,且类库可用修改第三方包配置不是长远方案:不能在require第三方包的前面模拟一个process对象么
更多有关「微信小程序npm第三方包全局变量processenvNODE未定义」的讨论可以前往微信公开课小程序参与互动哦!
补充:微信小程序npm第三方包全局变量processenvNODE未定义
展开:需求的场景描述(希望解决的问题)我本周开始在学习微信小程序开发,需要使用redux管理数据状态,但发现有问题第一步:初始化packagejson;$npminit第二步:安装redux;$npminstallproductionredux第三步:使用开发者工具,构建npm;构建成功后,在根目录看到miniprogram_npm文件夹,第四步:小程序js文件中引用,比如constreduxLib=require(redux);第五步:编译小程序,此时报错了;VM15166:1thirdScriptErrorsdkuncaughtthirdErrorprocessisnotdefinedReferenceError:processisnotdefined错误原因是代码中有如下代码:121: if(processenvNODE_ENV!==production){分析:小程序中require第三方包,不是直接使用node_modules中文件,而是开发者工具构建后miniprogram_npm文件夹,流程方案是没有问题的但是对于源npm包中文件代码processenvNODE_ENV出现未定义该如何解决呢npm包中出现processenvNODE_ENV在浏览器端肯定是不通过的,我们知道现在大部分通过webpack打包,比如扩展webpackDefinePlugin可以注入变量,在打包期间将js代码替换掉newwebpackDefinePlugin({processenvNODE_ENV:JSONstringify(development)})我也查看了官方回复类似:https:developersweixinqqcomcommunitydevelopdoc000ece287f43202c46c6c0ad356000?highLine=processenv但没有解决,你们尝试新建一个项目,就安装redux:401版本,问题就重现了;实际对于第三方npm包的方案中,解决的还不是很彻底,受限制比较多题外尝试:node_modules文件夹中redux包中packagejson文件,节点main:libreduxjs文件,如果更改为main:distreduxjs,因为dist目录是打包后的文件;则不会报错,仅仅是require不报错,功能我还未写,是否可用未知;但我们不肯能去手动更改第三方包,多人开发,多次变更,很容易引入bug的;再者文件 main:libreduxjs也不是源码,不是src下文件,是个中间文件,完全可用的,所以微信开发者工具应该提供编译期间变量定义或者替换也许自定义编译条件可以解决,能够给个详细的操作说明,文档太简单,回复更简单但有想想自定义编译与js代码替换似乎没关系,到底要怎么解决变量注入或者变量替换呢希望提供的能力微信开发者工具,在编译或打包时,如何给第三方包注入变量比如替换掉源码包processenvNODE_ENV即速小程序:我的描述中,不是模拟,是微信开发者工具在”构建NPM包“过程中,让开发者有条件的替换被构建包文件以下是reduxlibreduxjs文件片段if(processenvNODE_ENV!==production){ if(typeofreducers[key]===undefined){ warning(Noreducerprovidedforkey+key+); } }以下是reduxdistreduxjs文件片段{ if(typeofreducers[key]===undefined){ warning(Noreducerprovidedforkey+key+); } }如果提供一种方案,自定义变量配置,意思是构建过程中,对源码processenvNODE_ENV替换为development{processenvNODE_ENV:development}替换后结果如下if(development!==production){ if(typeofreducers[key]===undefined){ warning(Noreducerprovidedforkey+key+); } }现在开发者工具在构建npm时,也是读取包文件字符串,然后外边套上模块化,封装为微信小程序包;以下就是微信开发者工具在构建npm包时的外壳;moduleexports=(function(){var__MODS__={};var__DEFINE__=function(modId,func,req){varm={exports:{}}; __MODS__[modId]={status:0,func:func,req:req,m:m};};var__REQUIRE__=function(modId,source){if(!__MODS__[modId])returnrequire(source);if(!__MODS__[modId]status){varm={exports:{}}; __MODS__[modId]status=1; __MODS__[modId]func(__MODS__[modId]req,m,mexports);if(typeofmexports===object){Objectkeys(mexports)forEach(function(k){__MODS__[modId]mexports[k]=mexports[k];});if(mexports__esModule)ObjectdefineProperty(__MODS__[modId]mexports,__esModule,{value:true});}else{__MODS__[modId]mexports=mexports;}}return__MODS__[modId]mexports;};var__REQUIRE_WILDCARD__=function(obj){if(obj&&obj__esModule){returnobj;}else{varnewObj={};if(obj!=null){for(varkinobj){if(ObjectprototypehasOwnPropertycall(obj,k))newObj[k]=obj[k];}}newObjdefault=obj;returnnewObj;}};var__REQUIRE_DEFAULT__=function(obj){returnobj&&obj__esModule?objdefault:obj;};__DEFINE__(1546957715463,function(require,module,exports){原npm包中文件拷贝到此处,外层微信穿上模块衣服;},function(modId){varmap={};return__REQUIRE__(map[modId],modId);})return__REQUIRE__(1546957715463);})()我的需求不是一个包使用的问题,webpack打包的包很多了,npm社区更多第三方包都会有类似问题,是不是该考虑从源头上解决,而不是一味的苛刻包的格式符合微信的,这些npm包也不是特殊包,也是行业认可的,你们说是吗有问题解决问题,不要一味推脱;我今天下午测试了,修改node_modules文件夹中redux包中packagejson文件,节点main:libreduxjs文件,如果更改为main:distreduxjs,代码不会出错,且类库可用修改第三方包配置不是长远方案:不能在require第三方包的前面模拟一个process对象么
更多有关「微信小程序npm第三方包全局变量processenvNODE未定义」的讨论可以前往微信公开课小程序参与互动哦!
标签:微信公开课,小程序
「微信小程序npm第三方包全局变量processenvNODE未定义」热门讨论订阅
方法1:微信扫描微信公开课小程序码即可订阅热门讨论「微信小程序npm第三方包全局变量processenvNODE未定义」
方法2:微信搜索微信公开课小程序名称进入,即可订阅热门讨论「微信小程序npm第三方包全局变量processenvNODE未定义」
方法3:微信网页访问即速商店,长按识别微信公开课小程序码即可订阅热门讨论「微信小程序npm第三方包全局变量processenvNODE未定义」
微信公开课小程序热门讨论「微信小程序npm第三方包全局变量processenvNODE未定义」由微信公开课原创摘录于微信小程序商店shop.jisuapp.cn,转载请注明出处。
微信公开课热门讨论「微信小程序npm第三方包全局变量processenvNODE未定义」由微信公开课开发者向微信用户提供,并对本服务内容、数据资料及其运营行为等真实性、合法性及有效性承担全部责任。
微信公开课小程序
更新时间:2019-03-15 18:17:35
>
__methodCallerx27;ofundefined
>-404011cloudfunctionexecutionerror
>,请补充选择商家自营-预付卡销售-发行方类目,并在基础信息处申请该类目,通过
>:host在模拟器中显示无效
>:请在小程序服务页面上架正式(非测试)内容或商品后重新提交审核
>.net 微信小程序 上传图片
>'setTimeout'的问题
>‘三朵里熙SPA主题减压空间’为什么搜索关键词‘三朵里‘搜不到
>‘扫普通链接二维码打开小程序‘中设置为体验版,扫码打开是线上版本
>“cloudfunctions**indexjs”gitignore
>“NO ULINK DEVICE FOUND”是怎么回事
>“万马掌上校园”的类目审核
>“上线了”公司开发的微信小程序怎么样?
>“产品是否一定需要条形码”
>