当前位置: 首页 > news >正文

npm 抽取 解析(持续更新中)

1、boot

ConfigMap
1、构建时注入
ne run dev -e JEEP_URL=jiang111,ALFA_URL=yunjin222

2、在 package.json 中写入

在项目的 package.json 文件中,可以添加特定的键来配置环境变量,这些配置会在运行 ne 命令时自动注入。

  • ne-env-[command]:这是一个对象,用于指定在特定命令下需要注入的环境变量,例如:
"ne-env-dev": {
  "NODE_SYS": "dealer"
}

3、在eggjs为基础的后端工程中

注入 Egg.js 启动参数

ne run dev --senv port=7002

ne-senv-[command]:与 ne-env 类似,但只在以 Egg.js 为基础的后端工程中有效,例如:

"ne-senv-dev": {
  "port": "7002"
}

4、扩展

Egg.js 是一个基于 Node.js 的后端开发框架,旨在帮助开发者更高效地构建企业级应用。所以,当文档提到 "ne-senv" 只在 Egg.js 后端工程中有效时,意思是在使用 Egg.js 框架构建的后端应用中,可以通过该方式注入环境变量。

fs: bin/ne

主要目的: 运行后CMD中需要执行的命令

cmdObj === : 

  "dashboard"{"dev""cross-env NODE_ENV=development $env$ node server/server.js","build""cross-env $env$ ne-webpack -c vue_dashboard"}, "h5"{"dev""cross-env NODE_ENV=development $env$ node server/server.js","build""cross-env $env$ ne-webpack -c vue_h5","startup:docker""pm2-docker start startup.json"  }

通过pkg.name 来决定是 h5、b端、还是服务端 --- projectType

command 是run 后面的命令,例如 dev、build、lint

options 是环境变量,详情请看上一小节;

  const envArr1 = options.parent.env.split(',');const snykReg = new RegExp('\\$snyk-token\\$', 'ig');cmdObj[ projectType ][ command ] = cmdObj[ projectType ][ command ].replace(snykReg, envArr1[i]);

commander 
创建命令行命令和选项:commander 允许你定义和注册命令行命令和选项。你可以轻松地定义程序支持的各种命令和参数,从而实现丰富的命令行功能。处理命令行参数:通过 commander,你可以轻松地解析用户在命令行中输入的参数,包括选项和参数值。它支持解析长选项(例如 --verbose)和短选项(例如 -v)。生成帮助信息:commander 可以自动生成清晰的帮助文档,以便用户了解如何正确使用你的命令行工具。帮助文档会列出支持的命令、选项和参数,并提供说明和示例。嵌套子命令:commander 支持创建带有子命令的命令行工具,这样你可以更好地组织和管理复杂的命令集合。例如,你可以创建一个主命令,然后为该命令添加多个子命令。事件处理:你可以通过监听事件的方式处理特定的命令行事件,例如解析选项后触发的事件。自定义输出:你可以自定义输出格式,包括错误消息、提示信息和其他文本。

是一个强大且灵活的工具,可用于创建具有交互性和易用性的命令行界面,适用于构建各种类型的命令行工具和实用程序。

2、nginx-cache

Params
// 第一参数 === ['/webapp']
// 第二参数 === webpack相关配置、 
/第三个参数是回调函数

Enter
  if (webpackConfig) { // 本地构建 npm run dev
    const koaWebpack = require('koa-webpack');
// 使用 koa-webpack 模块创建处理 webpack 的中间件,并添加到中间件数组中。
    koaWebpack({ config: webpackConfig }).then(webpackHandler => {
      middleware.push(webpackHandler);});} else {  // 生产构建 npm run build
      const indexHandler = async (ctx, next) => {if (ctx.path === '/') {
        callback && callback(ctx); // 调用回调函数。if (!ctx.body) { // 如果响应体为空。
          ctx.path = '/index.html';// 发送 index.html 文件作为响应。
          await send(ctx, ctx.path, { root: staticPath[0] });}} else {
        await next(); // 调用下一个中间件。}};
    middleware.push(indexHandler)}

koa-static-cache

该组件主要是设置静态文件的缓存、gzip、接口错误处理等;

   const koaStaticCache = require('koa-static-cache')if (typeof item === 'string') {
      staticCache = koaStaticCache(item, {
        maxAge: 365 * 24 * 60 * 60, // 缓存的最大时间,以秒为单位。
        gzip: true, // 是否启用 Gzip 压缩。
        usePrecompiledGzip: true, // 是否使用预编译的 Gzip 文件。
        dynamic: true, // 是否支持动态更新缓存。});} 
此部分主要依赖koaStaticCache设置缓存与开启Gzip;if (err == 'Error: login is required') {
          ctx.status = 401;
          ctx.body = 'login is required';} else {
          assert.ifError(err); // 使用 assert 来断言没有错误发生。}

3、nginx-proxy

单一职责:http-proxy
const proxyServer = HttpProxy.createProxyServer();proxyServer.web(ctx.req, ctx.res, options, e => {
          const status = {
            ECONNRESET: 502,
            ECONNREFUSED: 503,
            ETIMEOUT: 504,}[ e.code ];if (status) ctx.status = status;if (this.options.handleError) {
          this.options.handleError.call(null, {
            e, req: ctx.req, res: ctx.res });}
          resolve();});

4、webpack

原始系列
    "webpack": "4.35.3",
    "webpack-cli": "^3.3.6",
    "webpack-merge": "^4.2.1"

最新版本:

    "@vue/cli-service": "~5.0.0" // 使用的是 Webpack 5。    Vue CLI 使用 Vue CLI Service 来管理构建和开发流程,其中包括了对不同模块的配置读取和整合。Vue CLI 会主动读取项目根目录下的 vue.config.js 文件,以获取项目的自定义配置信息,例如自定义的 Webpack 配置、代理设置、插件配置等。

优化系列

代码进行了压缩,生产环境去除console;

进行了图片压缩, 生产构建的时候生成gzip文件;

js与css进行代码分割处理;

减小外部依赖包的体积,引用外部依赖;

  1. Vendors 文件忽略外部依赖;
  2. Main 文件进行再次分割;
  3. 解决图片压缩后访问不到的问题;
  4. npm抽取之后压缩并只上传构建的内容;webpack最好也压缩s

相关文章:

  • jdk8升级JDK17避坑指南
  • 大创项目推荐 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv
  • 本地映射测试环境域名,解决登录测试环境后,也可以使用本地域名访问,可以正常跑本地项目
  • k8s之陈述式资源管理
  • 八、typescript 高级类型与模块
  • 【每日一题】LeetCode206.反转链表
  • Python圣诞树代码
  • 【UML】第12篇 序列图(1/2)——基本概念和构成
  • [数据结构]树与二叉树的性质
  • ------- 计算机网络基础
  • 思福迪运维安全管理系统 test_qrcode_b RCE漏洞复现
  • 【FPGA】Verilog 实践:优先级编码器 | Priority encoder
  • 一个实用的Wrapper类,解决mfc使用sqlite3时的中文乱码问题
  • W5500-EVB-Pico评估版介绍
  • 二、C#基础语法( 异常处理)
  • 【译】JS基础算法脚本:字符串结尾
  • 收藏网友的 源程序下载网
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [译] 怎样写一个基础的编译器
  • 【5+】跨webview多页面 触发事件(二)
  • Java方法详解
  • Laravel Telescope:优雅的应用调试工具
  • mysql常用命令汇总
  • Promise面试题,控制异步流程
  • PV统计优化设计
  • SSH 免密登录
  • Vue2.0 实现互斥
  • 阿里云Kubernetes容器服务上体验Knative
  • 程序员该如何有效的找工作?
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 分享几个不错的工具
  • 猴子数据域名防封接口降低小说被封的风险
  • 检测对象或数组
  • 前端技术周刊 2019-01-14:客户端存储
  • 如何进阶一名有竞争力的程序员?
  • 如何选择开源的机器学习框架?
  • 少走弯路,给Java 1~5 年程序员的建议
  • 微信小程序实战练习(仿五洲到家微信版)
  • 小程序button引导用户授权
  • 一起参Ember.js讨论、问答社区。
  • 正则表达式
  • 数据可视化之下发图实践
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • #DBA杂记1
  • #mysql 8.0 踩坑日记
  • (9)目标检测_SSD的原理
  • (过滤器)Filter和(监听器)listener
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (一)WLAN定义和基本架构转
  • *Django中的Ajax 纯js的书写样式1
  • .net反混淆脱壳工具de4dot的使用
  • .net网站发布-允许更新此预编译站点
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • @EventListener注解使用说明