微信小程序npm第三方包全局变量 process.env.NODE 未定义
- 需求的场景描述(希望解决的问题) 我本周开始在学习微信小程序开发,需要使用redux管理数据状态,但发现有问题? 第一步: 初始化package.json; $npm init 第二步:安装redux; $npm install --production redux 第三步:使用开发者工具,构建npm;构建成功后,在根目录看到 miniprogram_npm 文件夹, 第四步:小程序js文件中引用,比如 const reduxLib = require('redux'); 第五步:编译小程序,此时报错了; ``` VM15166:1 thirdScriptError sdk uncaught third Error process is not defined ReferenceError: process is not defined ``` 错误原因是代码中有如下代码: ``` 121: if (process.env.NODE_ENV !== 'production') { ``` 分析: 小程序中 require 第三方包,不是直接使用 node_modules 中文件,而是开发者工具构建后miniprogram_npm文件夹,流程方案是没有问题的。 但是对于源npm包中文件代码 process.env.NODE_ENV 出现未定义该如何解决呢? npm包中出现process.env.NODE_ENV在浏览器端肯定是不通过的,我们知道现在大部分通过webpack打包, 比如扩展 webpack.DefinePlugin 可以注入变量,在打包期间将js代码替换掉 ``` new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('development') }) ``` 我也查看了官方回复类似: https://developers.weixin.qq.com/community/develop/doc/000ece287f43202c46c6c0ad356000?highLine=process.env 但没有解决,你们尝试新建一个项目,就 安装 "redux": "4.0.1" 版本,问题就重现了; 实际对于第三方npm包的方案中,解决的还不是很彻底,受限制比较多。 ----- 题外尝试:node_modules 文件夹中 redux包中package.json文件,节点 "main": "lib/redux.js"文件,如果更改为 "main": "dist/redux.js",因为dist目录是打包后的文件; 则不会报错,仅仅是require不报错,功能我还未写,是否可用未知; 但我们不肯能去手动更改第三方包,多人开发,多次变更,很容易引入bug的;再者文件 "main": "lib/redux.js" 也不是源码,不是src下文件,是个中间文件,完全可用的,所以微信开发者工具应该提供编译期间变量定义或者替换。 也许自定义编译条件可以解决,能够给个详细的操作说明,文档太简单,回复更简单。 但有想想自定义编译与js代码替换似乎没关系,到底要怎么解决变量注入或者变量替换呢? [图片] ----- - 希望提供的能力 微信开发者工具,在编译或打包时,如何给第三方包注入变量? 比如 替换掉源码包 process.env.NODE_ENV