首页IT科技npm run dev是什么命令(记录–你还在傻傻的npm run serve吗?快来尝尝这个!)

npm run dev是什么命令(记录–你还在傻傻的npm run serve吗?快来尝尝这个!)

时间2025-08-01 13:12:11分类IT科技浏览7178
导读:这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助...

这里给大家分享我在网上总结出来的一些知识                ,希望对大家有所帮助

// proxy.js const fs = require(fs) const path = require(path) const encoding = utf-8 const getContent = filename => { const dir = path.resolve(process.cwd(), environments) return fs.readFileSync(path.resolve(dir, filename), { encoding }) } const jsonParse = obj => { return Function("use strict";return ( + obj + ))() } const getConfig = () => { try { return jsonParse(getContent(proxy-config.json)) } catch (e) { return {} } } module.exports = { proxy: { // 接口匹配规则自行修改 /api: { // 这里必须要有字符串来进行占位 // 如果报错Invaild Url                       ,将target改成有效的url字符串即可        ,如http://localhost:9001 target: that must have a empty placeholder, changeOrigin: true, router: () => (getConfig() || {}).target || } } }
// proxy-config.json { "target": "http://localhost:9001" }

自此                ,当我们需要修改环境地址时                       ,只需要修改proxy-config.json文件便能够实时生效        ,不再需要npm run serve!

重点代码分析

实现代码中其实最主要的就是getContent这个方法        ,我们项目在每次发起http请求时都会调用router中的函数                       ,而getContent则会通过node的fs服务                ,对我们的环境地址文件进行实时读取        ,从而指向我们最新修改的环境地址                。

方案总结

在按照参考文档配置了项目代码之后                       ,我们发现确实能够及时指向新的环境地址                ,再也不需要重启代码,不需要长时间的等待了                       。但是                       ,我们多了两个需要维护的文件                       ,每次我们修改环境地址时,不仅需要修改config中的api                ,还需要修改proxy-config.json中的target!

有没有可能在只需要修改config文件的情况下                       ,实现代理地址动态修改呢?

方案优化

从上面的重点代码分析中        ,可以看到只要我们可以在router函数执行时                ,拿到正确的config文件中导出的api属性的值                       ,也可以实现同样的效果!

这是不是意味着只要我们在函数中对config文件进行require请求        ,读取api的值        ,再return出去就能及时修改代理指向了呢?

没错                       ,你会发现无论你怎么修改                ,函数内require取到的api永远是不变的        ,还是服务刚启动时的环境地址        。

参考源码可以知道                       ,这是因为我们在使用require请求文件信息时                ,node会解析出我们传入的字符串的文件路径的绝对路径,并且以绝对路径为键值                       ,对该文件进行缓存                。

因此                       ,如果我们在执行require函数时打断点进行观察的话,会发现require上面有一个cache缓存了已经加载过的文件                       。

这也恰恰说明了只要我们能够删除掉文件保存在require中的缓存                ,我们就能够拿到最新的文件内容                       ,那么我们也可以据此得出我们的最终优化方案        。

// vue.config.js const hotRequire = modulePath => { // require.resolve可以通过相对路径获取绝对路径 // 以绝对路径为键值删除require中的对应文件的缓存 delete require.cache[require.resolve(modulePath)] // 重新获取文件内容 const target = require(modulePath) return target } ... proxy: { /api: { // 如果router有效优先取router返回的值 target: that must have a empty placeholder, changeOrigin: true, // 每次发起http请求都会执行router函数 router: () => (hotRequire(./src/utils/config) || {}).api || , ws: true, pathRewrite: { ^/api: } } }

自此        ,我们项目修改环境地址将不在需要重启项目                ,也不需要维护额外的文件夹                       ,再也不需要痛苦等待了!

本文转载于:

https://juejin.cn/post/7198696282336313400

如果对您有所帮助        ,欢迎您点个关注        ,我会定时更新技术文档                       ,大家一起讨论学习                ,一起进步        。

声明:本站所有文章        ,如无特殊说明或标注                       ,均为本站原创发布                       。任何个人或组织                ,在未征得本站同意时,禁止复制                、盗用                       、采集        、发布本站内容到任何网站                、书籍等各类媒体平台                。如若本站内容侵犯了原著者的合法权益                       ,可联系我们进行处理        。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
查找我的imac(查找我的mac怎么用 苹果电脑如何防盗) wpf定时器使用(提高网站流量的秘诀:使用WordPress定时访问)