前端架构: 脚手架通用框架封装之入口文件开发(教程一)

脚手架入口文件开发

  • 创建脚手架项目: 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

    js 复制代码
    #!/usr/bin/env node
    
    console.log(1)
  • 到 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

    js 复制代码
    module.exports = (args) => {
      console.log('args: ', args);
    }
  • 修改 abc-cli/packages/cli/bin/cli.js

    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)); // 会执行这里
    }
  • 因为之前在 cli 包内执行了 npm link, 所以,这里一定会走 else

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

    js 复制代码
    $ abc-cli 123
    args:  [ '123' ]
  • 注意,这里 import-local 包

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

相关推荐
前端爆冲8 分钟前
项目中无用export的检测方案
前端
热爱编程的小曾36 分钟前
sqli-labs靶场 less 8
前端·数据库·less
gongzemin1 小时前
React 和 Vue3 在事件传递的区别
前端·vue.js·react.js
Apifox1 小时前
如何在 Apifox 中通过 Runner 运行包含云端数据库连接配置的测试场景
前端·后端·ci/cd
树上有只程序猿1 小时前
后端思维之高并发处理方案
前端
庸俗今天不摸鱼2 小时前
【万字总结】前端全方位性能优化指南(十)——自适应优化系统、遗传算法调参、Service Worker智能降级方案
前端·性能优化·webassembly
黄毛火烧雪下2 小时前
React Context API 用于在组件树中共享全局状态
前端·javascript·react.js
Apifox2 小时前
如何在 Apifox 中通过 CLI 运行包含云端数据库连接配置的测试场景
前端·后端·程序员
一张假钞2 小时前
Firefox默认在新标签页打开收藏栏链接
前端·firefox
高达可以过山车不行2 小时前
Firefox账号同步书签不一致(火狐浏览器书签同步不一致)
前端·firefox