码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 前端架构: 脚手架通用框架封装之入口文件开发(教程一)


    脚手架入口文件开发

    • 创建脚手架项目: abc-cli

      • $ mkdir abc-cli && cd abc-cli
    • 全局安装 lerna, $ npm i -g lerna

    • 基于 lerna 完成项目初始化

      • $ lerna init
    • 基于 lerna 创建脚手架 cli

      • $ lerna create cli
      • 一路回车
    • 好现在生成了一个 cli 的模板,目前需要修改它

    • 新建 abc-cli/packages/cli/bin/cli.js

      #!/usr/bin/env node
      
      console.log(1)
      
      • 1
      • 2
      • 3
    • 到 abc-cli/packages/cli/package.json 中修改

      • "name": "@abc.com/cli" 目前假设我们的组织是 abc.com
      • "main": "lib/index.js" 入口文件修改名称
      • "bin": { "abc-cli": "bin/cli.js" } 添加 bin 配置
      • "files": [ "lib", "bin" ] 在 files 中添加 bin
    • 在 abc-cli/packages/cli 中执行 $ npm link

      • 这样,验证执行 $ abc-cli 没有报错, 正常输出1,就行
    • 现在为cli包添加依赖, 在顶层 abc-cli 目录下执行

      • $ npm i import-local npmlog -w @abc.com/cli
    • 新建文件 abc-cli/packages/cli/lib/index.js

      module.exports = (args) => {
        console.log('args: ', args);
      }
      
      • 1
      • 2
      • 3
    • 修改 abc-cli/packages/cli/bin/cli.js

      #!/usr/bin/env node
      
      const il = require('import-local');
      const log = require('npmlog');
      const entry = require('../lib/index.js');
      
      // 判断 __filename 是否可以加载到本地的版本
      if (il(__filename)) {
        log.info('abc-cli', '使用本地版本'); // 这里不会走
      } else {
        entry(process.argv.slice(2)); // 会执行这里
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    • 因为之前在 cli 包内执行了 npm link, 所以,这里一定会走 else

    • 验证,执行 $ abc-cli 123, 终端输出如下

      $ abc-cli 123
      args:  [ '123' ]
      
      • 1
      • 2
    • 注意,这里 import-local 包

      • 它的主要作用是导入本地包,以避免全局npm包和本地项目中的包产生冲突
      • 当全局node_modules和本地node_modules中存在相同的库时,import-local会优先加载本地node_modules中的库
      • 这样可以确保项目中使用的是本地安装的、可能经过定制的库版本,而不是全局安装的版本
      • 这对于管理项目依赖和避免版本冲突非常有用
    • 此时,我们通用脚手架框架的入口文件开发完毕了

  • 相关阅读:
    高防IP是什么?如何隐藏源站IP?如何进行防护?
    【运筹优化】结合天际线启发式的遗传算法求解二维矩形装箱问题 + Java代码实现
    Vue前端框架
    人脸识别技术与人证合一智能闸机的剖析
    深度学习卫星遥感图像检测与识别 -opencv python 目标检测 计算机竞赛
    Java-使用sqlSessionTemplate实现批量更新-模拟mybatis 动态sql
    九、一起学习Eclipse 创建 Java 项目
    基于监督学习的多模态MRI脑肿瘤分割,使用来自超体素的纹理特征(Matlab代码实现)
    RT-Thread STM32F407 PWM
    JSP include能包含html页面吗?
  • 原文地址:https://blog.csdn.net/Tyro_java/article/details/136381086
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号