码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 原生CLI指令构建npm run减少硬盘node_modules的开销


    原生CLI指令构建npm run减少硬盘node_modules的开销

    目录

    原生CLI指令构建npm run减少硬盘node_modules的开销

    一、vue-cli-service的本质及其原生指令

    二、vue-cli-service原生指令的现实意义

    三、vue-cli-service原生指令减少node_modules依赖的磁盘开销

            3.1、文件serve.cmd开始启动原生开发服务器CLI指令:

            3.2、文件build.cmd开始启动原生“生产环境”分发服务的CLI指令:

            3.3、每个工程路径根下简单复制这两个文件即可

            3.4、vscode或操作系统运行的终端控制台中分别运行它们,轻松搞定

    四、效益

    4.1、“共享依赖树”及其进程

    4.2、减少了“热启动”编译日志冗余,方便浏览控制台的历史

    喜欢的,就收藏并点个赞,鼓励我继续技术的原创写作:


    一、vue-cli-service的本质及其原生指令

           在上一篇《vue执行配置选项npm run serve的本质》 中,我们分享了vue-cli-service的本质,及其原生指令为:

    开发环境,npm run serve 的原生CLI命令行脚本为:

    1. node .\node_modules\@vue\cli-service\bin\vue-cli-service.js serve

    同理,生产环境,进行分发时,npm run build 的原生CLI命令行脚本为:

    node .\node_modules\@vue\cli-service\bin\vue-cli-service.js build

           那么,它在现实中有什么意义呢?

    二、vue-cli-service原生指令的现实意义

           先来看图说话:

           @vue/cli安装并生成vue项目后,node_modules的依赖树,经过构建工具这么一折腾,其磁盘“缓存”剧增。

           试想,如果每个工程,都这么部署,那么你如果构建的项目稍微一多,那么磁盘分卷的空间,将会很快吃紧,一两个T的固态硬盘空间很快耗尽。

           利用vue-cli-service的本质及其原生指令,可以很好地解决这一困惑,如下。

    三、vue-cli-service原生指令减少node_modules依赖的磁盘开销

           我们已经知道:

    1. {
    2. "name": "testtest",
    3. "version": "0.1.0",
    4. "private": true,
    5. "scripts": {
    6. "serve": "vue-cli-service serve",
    7. "build": "vue-cli-service build",
    8. "lint": "vue-cli-service lint"
    9. },
    10. "dependencies": {
    11. "core-js": "^3.6.5",
    12. "vue": "^2.6.11",
    13. "vue-router": "^3.2.0",
    14. "vuex": "^3.4.0"
    15. },
    16. "devDependencies": {
    17. "@vue/cli-plugin-babel": "~4.5.0",
    18. "@vue/cli-plugin-eslint": "~4.5.0",
    19. "@vue/cli-plugin-router": "~4.5.0",
    20. "@vue/cli-plugin-vuex": "~4.5.0",
    21. "@vue/cli-service": "~4.5.0",
    22. "@vue/eslint-config-prettier": "^6.0.0",
    23. "babel-eslint": "^10.1.0",
    24. "eslint": "^6.7.2",
    25. "eslint-plugin-prettier": "^3.3.1",
    26. "eslint-plugin-vue": "^6.2.2",
    27. "less": "^3.0.4",
    28. "less-loader": "^5.0.0",
    29. "prettier": "^2.2.1",
    30. "vue-template-compiler": "^2.6.11"
    31. },
    32. "eslintConfig": {
    33. "root": true,
    34. "env": {
    35. "node": true
    36. },
    37. "extends": [
    38. "plugin:vue/essential",
    39. "eslint:recommended",
    40. "@vue/prettier"
    41. ],
    42. "parserOptions": {
    43. "parser": "babel-eslint"
    44. },
    45. "rules": {}
    46. },
    47. "browserslist": [
    48. "> 1%",
    49. "last 2 versions",
    50. "not dead"
    51. ]
    52. }

            其中,脚本命令可以做如下替换。

            原本:

    1. "scripts": {
    2. "serve": "vue-cli-service serve",
    3. "build": "vue-cli-service build",
    4. },

            可以替换为控制台命令:

    1. node ..\node_modules\@vue\cli-service\bin\vue-cli-service.js serve
    2. node ..\node_modules\@vue\cli-service\bin\vue-cli-service.js build

            那么,我们只需用文本编辑器,编辑两个操作系统的“批处理”可执行文件,即可。

            步骤:

            3.1、文件serve.cmd开始启动原生开发服务器CLI指令:

    1. # serve.cmd开始启动原生开发服务器CLI指令:
    2. node ..\node_modules\@vue\cli-service\bin\vue-cli-service.js serve

            3.2、文件build.cmd开始启动原生“生产环境”分发服务的CLI指令:

    1. # build.cmd开始启动原生“生产环境”分发服务的CLI指令:
    2. node ..\node_modules\@vue\cli-service\bin\vue-cli-service.js build

            3.3、每个工程路径根下简单复制这两个文件即可

            当然,如果你熟悉操作系统command脚本,也可直接修改“共享依赖”.\bin下的vue-cli-service.cmd和vue-cli-service这两个文件,修改其中的vue-cli-service.js的路径指向:

             这属于操作系统方面的知识,这里就不再赘述了。

             注意,批处理文件应当存为ANSI编码而非UTF8或Unicode,否则你加入的中文备注运行时会现实乱码:

            当然,在 Node.js 模块系统中,如果 require 的模块不是核心模块,而且没有 './' 之类的开头,那就需要从当前 package 的 node_modules 里面找,找不到就到当前 package 目录上层 node_modules 里面取... 一直找到全局 node_modules 目录。这样找到的往往是文件夹,所以接下来就是处理一个文件目录作为 Node 模块的情况。如果文件目录下有 package.json,就根据它的 main 字段找到 js 文件。如果没有 package.json,那就默认取文件夹下的 index.js。由于 webpack browsersify 等模块打包工具是兼容 node 的模块系统的,自然也会进行同样的处理流程。不同的是,它们支持更灵活的配置。比如在 webpack 里面,可以通过 alias 和 external 字段配置,实现对默认 import 逻辑的自定义。webpack.config.js,......,但配置起来复杂,而且全部需要Node.js全局依赖的支持,麻烦、不简洁,而且失去了灵活性。

            3.4、vscode或操作系统运行的终端控制台中分别运行它们,轻松搞定

    四、效益

    4.1、“共享依赖树”及其进程

     

     

    4.2、减少了“热启动”编译日志冗余,方便浏览控制台的历史

            代码更新的响应式,仍然有效:

     

    4.3、还能同时满足局部项目package.json等配置的灵活性

    喜欢的,就收藏并点个赞,鼓励我继续技术的原创写作:

    vue执行配置选项npm run serve的本质_pulledup的博客-CSDN博客

  • 相关阅读:
    Day55 web框架 入门 Django
    Android 12 init(3) 属性服务
    面试题 集合List ArrayList LinkedList 迭代器的FailFast
    金仓数据库 KingbaseES 插件参考手册(22. dbms_sql)
    Fury:一个基于JIT动态编译的高性能多语言原生序列化框架
    sql操作
    微机-------CPU与外设之间的数据传送方式
    基金交互文件汇总
    echarts自定义提示框悬浮文字
    ShardingSphere-Proxy基本使用
  • 原文地址:https://blog.csdn.net/pulledup/article/details/126850527
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号