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

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

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

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

// 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
linux如何修改网关(Linux系统怎么更改默认网关?)