1.Jvm-Sandbox原理分析-Sandbox的源码启动-01
2.javawebç¨ä»ä¹ç¼è¯å¨(javawebç¨ä»ä¹è½¯ä»¶ç¼å)
3.使用lerna管理monorepo及发npm包实战教程
4.Ubuntu离线安装gcc/g++/make/cmake
5.前端开发框架都有哪些(前端开发的框架有哪些)
Jvm-Sandbox原理分析-Sandbox的启动-01
Jvm-Sandbox的启动(一):sandbox.sh脚本分析
Sandbox的启动是通过其内置的shell脚本 sandbox.sh 开始执行的,一切的下载开始皆可从该脚本中探寻出结果。脚本有一定的源码代码量,大概有+行,下载这里将该脚本分为如下几个部分进行讲解:
1、源码变量定义过程这个过程首先预定义了接下来即将使用的下载源码设计装饰电话一些变量。代码如下:
# 定义sandbox的源码home目录,并为其赋值 typeset SANDBOX_HOME_DIR [[ -z ${ SANDBOX_HOME_DIR} ]] && SANDBOX_HOME_DIR=${ PWD}/..# 定义 SANDBOX_USER,下载并为其赋值 typeset SANDBOX_USER=${ USER} [[ -z ${ SANDBOX_USER} ]] && SANDBOX_USER=$(whoami)# 定义 SANDBOX_SERVER_NETWORK typeset SANDBOX_SERVER_NETWORK# 定义lib目录,源码这个目录下主要存放jar包 typeset SANDBOX_LIB_DIR=${ SANDBOX_HOME_DIR}/lib# 定义 SANDBOX_TOKEN_FILE typeset SANDBOX_TOKEN_FILE="${ HOME}/.sandbox.token"# 定义JVM参数 SANDBOX_JVM_OPS typeset SANDBOX_JVM_OPS="-XmsM -XmxM -Xnoclassgc -ea"# 定义目标JVM的下载进程号,后面的源码agent主要attach到该JVM进程上 typeset TARGET_JVM_PID# 定义目标机器IP以及默认机器IP typeset TARGET_SERVER_IP typeset DEFAULT_TARGET_SERVER_IP="0.0.0.0"# 定义目标进程端口 typeset TARGET_SERVER_PORT# 定义名称空间 typeset TARGET_NAMESPACE typeset DEFAULT_NAMESPACE="default"注释和变量命名已经描绘的非常清楚了,在看后面代码遇到忘记了的下载变量可以到这里来回顾下。
这里为其中一些变量补充说明:
SANDBOX_HOME_DIR:shell脚本中,源码-z表示检测紧跟的下载字符串长度是否为0,如果为0返回true。源码这里使用短路与,如果 ${ SANDBOX_HOME_DIR} 为0,则使用 ${ PWD}/.. 的目录作为sandbox的home目录。这种方式表示优先使用环境变量 SANDBOX_HOME_DIR,如果未定义环境变量SANDBOX_HOME_DIR,则使用当前目录。
SANDBOX_TOKEN_FILE:这个文件主要存放了sandbox attach记录,包括attach进程的host:port。
TARGET_SERVER_IP:一般情况下,我们都是将整个工程打包后上传至目标机器,然后在目标机器上执行该shell脚本,因此默认机器IP一般为localhost即可。
2、执行入口执行入口就比较简单了,就一行代码,其中${ @}会保存我们传递给该shell脚本的所有参数:
main "${ @}"比方说,我们以如下命令启动脚本,则${ @} 就包含了-p 这个参数
./sandbox.sh -p 、main函数main函数是该脚本的重要方法,也是脚本的执行入口,它主要完成了以下几件事:
其代码如下所示:
function main() { # 遍历脚本参数 while getopts "hp:vFfRu:a:A:d:m:I:P:ClSn:X" ARG; do case ${ ARG} in h) # 帮助手册函数,大家可以自行翻阅源码查看 usage exit ;; # 赋值PID p) TARGET_JVM_PID=${ OPTARG} ;; v) OP_VERSION=1 ;; l) OP_MODULE_LIST=1 ;; R) OP_MODULE_RESET=1 ;; F) OP_MODULE_FORCE_FLUSH=1 ;; f) OP_MODULE_FLUSH=1 ;; u) OP_MODULE_UNLOAD=1 ARG_MODULE_UNLOAD=${ OPTARG} ;; a) OP_MODULE_ACTIVE=1 ARG_MODULE_ACTIVE=${ OPTARG} ;; A) OP_MODULE_FROZEN=1 ARG_MODULE_FROZEN=${ OPTARG} ;; d) OP_DEBUG=1 ARG_DEBUG=${ OPTARG} ;; m) OP_MODULE_DETAIL=1 ARG_MODULE_DETAIL=${ OPTARG} ;; # 赋值IP I) TARGET_SERVER_IP=${ OPTARG} ;; # 赋值PORT P) TARGET_SERVER_PORT=${ OPTARG} ;; C) OP_CONNECT_ONLY=1 ;; S) OP_SHUTDOWN=1 ;; n) OP_NAMESPACE=1 ARG_NAMESPACE=${ OPTARG} ;; X) set -x ;; ?) usage exit_on_err 1 ;; esac done # 重置环境 reset_for_env # 校验权限 check_permission# 根据不同的参数,进行相应处理 # 如果没有指定IP,则使用默认值 [ -z "${ TARGET_SERVER_IP}" ] && TARGET_SERVER_IP="${ DEFAULT_TARGET_SERVER_IP}"# 如果没有指定port,使用默认值 [ -z "${ TARGET_SERVER_PORT}" ] && TARGET_SERVER_PORT=0# reset NAMESPACE [[ ${ OP_NAMESPACE} ]] && TARGET_NAMESPACE=${ ARG_NAMESPACE} [[ -z ${ TARGET_NAMESPACE} ]] && TARGET_NAMESPACE=${ DEFAULT_NAMESPACE}if [[ ${ OP_CONNECT_ONLY} ]]; then [[ 0 -eq ${ TARGET_SERVER_PORT} ]] && exit_on_err 1 "server appoint PORT (-P) was missing" SANDBOX_SERVER_NETWORK="${ TARGET_SERVER_IP};${ TARGET_SERVER_PORT}" else # -p was missing [[ -z ${ TARGET_JVM_PID} ]] && exit_on_err 1 "PID (-p) was missing." # attach jvm的核心方法 attach_jvm fi# -v show version [[ -n ${ OP_VERSION} ]] && sandbox_curl_with_exit "sandbox-info/version"# -l list loaded modules [[ -n ${ OP_MODULE_LIST} ]] && sandbox_curl_with_exit "sandbox-module-mgr/list"# -F force flush module [[ -n ${ OP_MODULE_FORCE_FLUSH} ]] && sandbox_curl_with_exit "sandbox-module-mgr/flush" "&force=true"# -f flush module [[ -n ${ OP_MODULE_FLUSH} ]] && sandbox_curl_with_exit "sandbox-module-mgr/flush" "&force=false"# -R reset sandbox [[ -n ${ OP_MODULE_RESET} ]] && sandbox_curl_with_exit "sandbox-module-mgr/reset"# -u unload module [[ -n ${ OP_MODULE_UNLOAD} ]] && sandbox_curl_with_exit "sandbox-module-mgr/unload" "&action=unload&ids=${ ARG_MODULE_UNLOAD}"# -a active module [[ -n ${ OP_MODULE_ACTIVE} ]] && sandbox_curl_with_exit "sandbox-module-mgr/active" "&ids=${ ARG_MODULE_ACTIVE}"# -A frozen module [[ -n ${ OP_MODULE_FROZEN} ]] && sandbox_curl_with_exit "sandbox-module-mgr/frozen" "&ids=${ ARG_MODULE_FROZEN}"# -m module detail [[ -n ${ OP_MODULE_DETAIL} ]] && sandbox_curl_with_exit "sandbox-module-mgr/detail" "&id=${ ARG_MODULE_DETAIL}"# -S shutdown [[ -n ${ OP_SHUTDOWN} ]] && sandbox_curl_with_exit "sandbox-control/shutdown"# -d debug if [[ -n ${ OP_DEBUG} ]]; then sandbox_debug_curl "module//post/javawebç¨ä»ä¹ç¼è¯å¨(javawebç¨ä»ä¹è½¯ä»¶ç¼å)
javawebå¯ä»¥ç¨ä»ä¹å¼å
1ãå¹³å°ï¼ä¸è¬çjavawebå¼åé½ä½¿ç¨myeclipseï¼å¤ç¨ï¼ææ¡åºæ¬çè°å¼ãæéï¼ä¸»è¦å¨å®é å¼åä¸ç§¯ç´¯å·¥å ·ä½¿ç¨çç»éªï¼ä»¥åæéè½åã
2ãJAVAæ¯ä¸ç§å¼åè¯è¨ï¼å¯ä»¥ç¨äºå¼åWEBåºç¨è½¯ä»¶ï¼ä½ç°å¨å¼åWEB软件æ´å¤æ¯ç¨å¿«éå¼åæ¡æ¶ï¼è¿æ ·å¯ä»¥å®ç°å¿«éå¼åï¼èä¸éä½äºå¼åé¾åº¦ï¼æ¯å¦å¤©çºµæºè½å¼åå¹³å°ï¼åºæ¬å®ç°äºæ 代ç å¼åï¼ä»»ä½äººé½å¯ä»¥å¼å软件äºã
3ãï¼å端å¼å人åï¼ç²¾éJSï¼è½çç»åºç¨JQueryï¼æCSSï¼è½çç»è¿ç¨è¿äºç¥è¯ï¼è¿è¡äº¤äºææçå¼åã2ï¼å端å¼å人åï¼ä¼åJava代ç ï¼ä¼åSQLè¯å¥ï¼è½åç®åçæ°æ®åºè®¾è®¡ï¼ä¼SpringåiBatisï¼æä¸äºè®¾è®¡æ¨¡å¼çã
4ãSunJavaStudioæ¯Sunå ¬å¸ææ°åå¸çåç¨å ¨åè½JavaIDEï¼æ¯æSolarisãLinuxåWindowså¹³å°ï¼éäºå建åé¨ç½²2å±JavaWebåºç¨ånå±J2EEåºç¨çä¼ä¸å¼å人å使ç¨ãNetBeansæ¯ä¸ç第ä¸æ¬¾æ¯æåæ°åJavaå¼åçå¼æ¾æºç IDEã
5ãNetBeansï¼NetBeansæ¯å¼æºè½¯ä»¶å¼åéæç¯å¢ï¼æ¯ä¸ä¸ªå¼æ¾æ¡æ¶ï¼å¯æ©å±çå¼åå¹³å°ï¼å¯ä»¥ç¨äºJavaãC/C++ï¼PHPçè¯è¨çå¼åï¼æ¬èº«æ¯ä¸ä¸ªå¼åå¹³å°ï¼å¯ä»¥éè¿æ©å±æ件æ¥æ©å±åè½ãå¨javaå¼åæ¹é¢ç±»ä¼¼äºå两个ï¼ç¨èµ·æ¥ä¸è¬ã
6ãçç»ç使ç¨Javaè¯è¨è¿è¡é¢å对象ç¨åºè®¾è®¡ï¼æè¯å¥½çç¼ç¨ä¹ æ¯ï¼çæ常ç¨çJavaAPIï¼å æ¬***æ¡æ¶ãå¤çº¿ç¨ï¼å¹¶åç¼ç¨ï¼ãI/Oï¼NIOï¼ãSocketãJDBCãXMLãåå°çã
åJavaWebç¨åº,ç¨ä»ä¹å¼åå·¥å ·?Javawebä¼ä½¿ç¨å°çå¼åå·¥å ·å软件æå¾å¤ï¼ä¸é¢ä¸ºæ¨ä»ç»å¸¸è§çå ç§ï¼Tomcatï¼ä½ä¸ºjavawebå¼åçç¨åºåï¼ä¸ä¸ªè½»é级çwebæå¡å¨å¿ ä¸å¯å°ï¼tomcatå¨å®é å¼åä¸ä½¿ç¨çè¾ä¸ºå¹¿æ³ï¼å®ä»¥è½»é级ï¼åè½å ¨è称ã
JDK(JavaDevelopmentKit)Javaå¼åå·¥å ·éSUNçJavaä¸ä» æäºä¸ä¸ªä¸°å¯çè¯è¨åè¿è¡ç¯å¢ï¼èä¸è¿æäºä¸ä¸ªå è´¹çJavaå¼åå·¥å ·é(JDK)ãå¼å人ååæç»ç¨æ·å¯ä»¥å©ç¨è¿ä¸ªå·¥å ·æ¥å¼åjavaç¨åºã
BootstrapBootstrapæ¯å¿«éå¼åWebåºç¨ç¨åºçåç«¯å·¥å ·å ãå®æ¯ä¸ä¸ªCSSåHTMLçéåï¼å®ä½¿ç¨äºæ°çæµè§å¨ææ¯ï¼ç»ä½ çWebå¼åæä¾äºæ¶å°ççå¼ï¼è¡¨åï¼buttonsï¼è¡¨æ ¼ï¼ç½æ ¼ç³»ç»ççã
请é®javaç¼åç¨åºé¤äºç¨eclipse,è¿å¯ä»¥ç¨ä»ä¹?æ主è¦æ¯æ³åwebå端ç...
NetBeansæ¯å¼æ¾æºç çJavaéæå¼åç¯å¢(IDE)ï¼éç¨äºåç§å®¢æ·æºåWebåºç¨ãSunJavaStudioæ¯Sunå ¬å¸ææ°åå¸çåç¨å ¨åè½JavaIDEï¼æ¯æSolarisãLinuxåWindowså¹³å°ï¼éäºå建åé¨ç½²2å±JavaWebåºç¨ånå±J2EEåºç¨çä¼ä¸å¼å人å使ç¨ã
ç¨myeclipseæè eclipseï¼è®°äºæ¬é½å¯ä»¥ãåå¦è çè¯ä¸å»ºè®®ä¸æ¥å°±ç¨IDEå¼åå·¥å ·æ¯å¦è¯´EclipseãMyEclipseãIntelliJIDEAãnetbeanãä½æ¯ä¹å¯ä»¥ä½¿ç¨è¿äºï¼ä¸å»ºè®®çåå ä¸ä¾¿äºä½ äºè§£JavaAPIï¼åç¸å ³çç¼è¯åçï¼ç¼è¯è¿ç¨ä¹ç±»çã
javaç¯å¢æ³è¦ä»äºJavaå¼åï¼é£ä¹Javaè¿è¡ç¯å¢è¯å®æ¯ä½ é¦å éè¦å®è£ ç软件ï¼åå¦ä»¬å¯ä»¥èªè¡å»ç¾åº¦ä¸æç´¢Javaè¿å ¥å°å®ç½ä¸è½½å³å¯ï¼Javaç¯å¢çå®è£ åé ç½®æç¨ä¹åæè¿ä»ç»ï¼åå¦ä»¬ç¹å»ç¸å ³é 读å³å¯ã
Eclipse-IBMç©åºæ¥ç»å¼æºç¤¾åºçIDEï¼å ¶æ¬èº«å°±æ¯ä½¿ç¨Javaå¼åçã\x0d\MyEclipse-æEclipseå è£ äºä¸ä¸ï¼å äºJ2EEä¼ä¸å¼åç许å¤åè½å¼ºå¤§çæ件ã
netbeans.è¿ä¸ªè½¯ä»¶æç¨äºå¥½å¤å¹´äºï¼æºå¥½ç¨çï¼ç±å ¶å¨EJBå¼åæ¶ã
JAVAç¼ç¨å¸¸ç¨ç软件ï¼Eclipseï¼Eclipseæ¯ä¸ä¸ªå¼æ¾æºä»£ç çãåºäºJavaçå¯æ©å±å¼åå¹³å°ãå°±å ¶æ¬èº«èè¨ï¼å®åªæ¯ä¸ä¸ªæ¡æ¶åä¸ç»æå¡ï¼ç¨äºéè¿æ件ç»ä»¶æ建å¼åç¯å¢ã
javaç¨åºæ¯ç¨ä»ä¹è½¯ä»¶ç¼åçå?1ãJAVAç¼ç¨å¸¸ç¨ç软件ï¼IntellijIDEAIntellijIDEAæ¯å½åJavaå¼å人åå¼å£°å¾é«çä¸æ¬¾IDEï¼å ·æç¾è§ï¼é«æçä¼å¤ç¹ç¹ï¼å°ç¼è¿æ¯é常å欢çï¼æ以以å¾æé½æ¯å¨èªå·±çµèå®è£ è¿æ¬¾è½¯ä»¶çã
2ãæ°æ§ç¼ç¨ç°å¨ç¨çå¤çè¿æ¯MastercamãUGãCimtronãPowerMILLç软件ãå½å ä¹æCaxaï¼åèªç å¶ï¼ãNPUï¼è¥¿åå·¥ä¸å¤§å¦ç å¶ï¼çåè½ä¹å¾å¼ºå¤§ï¼éå大åä¸ç¨å·¥ä»¶çå å·¥ç¼ç¨ã
3ãç®ç§°IDEAï¼åæ ·æ¯ä¸æ¬¾å¾å¸¸ç¨çjava软件ãè½ç¶æ¯ä»è´¹è½¯ä»¶ï¼ä¸è¿javaçè¯è¨æ¯å è´¹çï¼ä¸è±é±å°±å¯ä»¥ä½¿ç¨ãå®çç¹ç¹å¨äºç¾è§ãé«æï¼å·ç§°æ¯âææºæ §çJavaideâï¼è½æä¾å¾å¼ºçåé æ§ã
4ãIntelliJIDEAç°å¨å¤§é¨åjavaå¼åè åºè¯¥é½ç¨çæ¯è¿ä¸ªãIntelliJIDEAæ两个çæ¬ï¼ä¸ä¸ªæ¯å è´¹ç社åºçï¼å¦å¤ä¸ä¸ªæ¯ä»è´¹çãä»è´¹çæ¥æçåè½æ´å¤ãç±JetBrainså¼åã
5ãIDEAæ¯Javaè¯è¨å¼åçéæç¯å¢ï¼IDEAå¨ä¸çè¢«å ¬è®¤ä¸ºæ好çJavaå¼åå·¥å ·ä¹ä¸ï¼ä½æ¯æ¶è´¹ç软件ï¼å¯¹åºæ们è¿äºç©·å°åæ¥è¯´ï¼æ¯ä¸ªåæ¶æ¯ãæææ们æä¸å½éæ³ã
6ãç¨myeclipseæè eclipseï¼è®°äºæ¬é½å¯ä»¥ãåå¦è çè¯ä¸å»ºè®®ä¸æ¥å°±ç¨IDEå¼åå·¥å ·æ¯å¦è¯´EclipseãMyEclipseãIntelliJIDEAãnetbeanãä½æ¯ä¹å¯ä»¥ä½¿ç¨è¿äºï¼ä¸å»ºè®®çåå ä¸ä¾¿äºä½ äºè§£JavaAPIï¼åç¸å ³çç¼è¯åçï¼ç¼è¯è¿ç¨ä¹ç±»çã
javaçç¼è¯å¨æ¯ä»ä¹æ¨èJcreatorï¼å®å¯¹äºåå¦è æ¯ä¸ªå¾å¥½çå¼åå·¥å ·ï¼åå°è¿è¡ä¹å¾å¿«ãå®è¦ç¨å°JDKï¼å¤§çIDEæJBuilderï¼netbeanï¼sunstdioï¼eclipseãç¼è¯å¨å°±æ¯å°ä¸ç§è¯è¨(é常为é«çº§è¯è¨)ç¿»è¯ä¸ºå¦ä¸ç§è¯è¨(é常为ä½çº§è¯è¨)çç¨åºã
JDKæä¾çç¼è¯å¨æ¯javacï¼å®æ¯Javaç¼è¯å¨çæ åå®ç°ãå®å¯ä»¥å°Javaæºä»£ç ç¼è¯æJavaåèç ï¼è¿äºåèç å¯ä»¥å¨Javaèææºï¼JVMï¼ä¸è¿è¡ãJavacæ¯ä¸ä¸ªå½ä»¤è¡å·¥å ·ï¼å¯ä»¥ä½¿ç¨å®æ¥ç¼è¯Javaæºä»£ç ã
javacæ¯Javaç¼è¯å¨ï¼è´è´£å°Javaæºä»£ç 转æ¢æåèç æ件ãjavacå¯ä»¥éå¼ç¼è¯ä¸äºæ²¡æå¨å½ä»¤è¡ä¸æåçæºæ件ãç¨-verboseé项å¯è·è¸ªèªå¨ç¼è¯ãå½ç¼è¯æºæ件æ¶ï¼ç¼è¯å¨å¸¸å¸¸éè¦å®è¿æ²¡æè¯å«åºçç±»åçæå ³ä¿¡æ¯ã
ä¸eclipse/myeclipseå½å¹´å¦ä¹ javaï¼æå æ¥è§¦å°çå°±æ¯eclipseãåäºä¸ªå»ï¼å½æ¶æè§eclipse好çåï¼æ好å¤å è¿çåè½ï¼å¯ä»¥æ¹ä¾¿å°è¿è¡å 管çã
使用lerna管理monorepo及发npm包实战教程
在维护多个package项目的同学来说,都会面临一个选择:这些package是放在一个仓库里维护还是放在多个仓库里单独维护。数量较少的时候,多个仓库维护不会有太大问题,但是当package数量逐渐增多时,一些问题逐渐暴露出来。
因此,我们需要找寻一条新的道路来管理我们的项目,一个理想的开发环境可以抽象成这样:“只关心业务代码,可以直接跨业务复用而不关心复用方式,调试时所有代码都在源码中。”
在前端开发环境中,多 Git Repo,多 npm 则是这个理想的阻力,它们导致复用要关心版本号,调试需要npm link。而这些是Lerna + MonoRepo 最大的优势。
什么是lerna
用于管理具有多个包的JavaScript项目的工具。这个介绍可以说很清晰了,引入lerna后,上面提到的问题不仅迎刃而解,更为开发人员提供了一种管理多packages javascript项目的方式。
什么是monorepo
Monorepo 的全称是 monolithic repository,即单体式仓库,与之对应的是 Multirepo(multiple repository),这里的“单”和“多”是指每个仓库中所管理的模块数量。
Multirepo 是比较传统的做法,即每一个 package 都单独用一个仓库来进行管理。例如:Rollup, ...
Monorep 是把所有相关的 package 都放在一个仓库里进行管理,每个 package 独立发布。例如:React, Angular, Babel, Jest, Umijs, Vue ...
了解了基本概念后,详细介绍下使用方法与api。
常用命令
我们需要全局安装lerna工具。
为所有项目安装依赖,iapp裕语言源码类似于npm/yarn i
提交对项目的更新 运行该命令会执行如下的步骤:
使用lerna 初始化项目
类似npm init命令
为packages文件夹下的package安装依赖
卸载依赖
比对包是否发生过变更
显示packages下的各个package的version
清理node_modules
lerna run 运行npm script,可以指定具体的package。
lerna.json解析
version:当前库的版本
useWorkspaces: 是否使用workspace来管理依赖 npmClient: 允许指定命令使用的client, 默认是 npm, 可以设置成 yarn command.publish.ignoreChanges:可以指定那些目录或者文件的变更不会被publish command.bootstrap.ignore:指定不受 bootstrap 命令影响的包 command.bootstrap.npmClientArgs:指定默认传给 lerna bootstrap 命令的参数 command.bootstrap.scope:指定那些包会受 lerna bootstrap 命令影响 packages:指定包所在的目录
使用lerna的基本工作流
环境配置
初始化一个lerna工程
在本地目录下初始化一个lerna工程。 1、创建一个空的文件夹,命名为my-app:
2、初始化 通过cmd进入相关目录,进行初始化
3、添加一个测试package 默认情况下,package是放在packages目录下的。但是自己想做一个组件库,改为了components
4、安装各packages依赖 这一步操作,官网上是这样描述的 在当前的Lerna仓库中引导包。安装所有依赖项并链接任何交叉依赖项。
5、发布 在发布的时候,就需要git工具的配合了。 所以在发布之前,请确认此时该lerna工程是否已经连接到git的远程仓库。你可以执行下面的命令进行查看。 本篇文章的代码托管在Github上。因此会显示此远程链接信息。 如果你还没有与远程仓库链接,请首先在github创建一个空的仓库,然后根据相关提示信息,进行链接。
第一次publish前我们需要执行
在输入用户名及密码之后执行这条命令
你就可以根据cmd中的提示,一步步的发布packges了。 实际上在执行该条命令的时候,lerna会做很多的工作。
到这里为止,就是一个最简单的lerna的工作流了。但是lerna还有更多的功能等待你去发掘。生成的packages如下:
工作模式
lerna有两种工作模式,Independent mode和Fixed/Locked mode,在这里介绍可能会对初学者造成困扰,但因为实在太重要了,还是有必要提一下的。 lerna的默认模式是Fixed/Locked mode,在这种模式下,实际上lerna是把工程当作一个整体来对待。每次发布packges,都是全量发布,无论是否修改。但是在Independent mode下,lerna会配合Git,检查文件变动,只发布有改动的packge。
使用lerna提升开发流程体验
接下来,我们从一个demo出发,了解基于lerna的开发流程。
项目初始化
我们需要维护一个UI组件库,其包含2个组件,分别为House(房子)和Window(窗户)组件,其中House组件依赖于Window组件。
增加依赖
接下来,我们来为组件增加些依赖,首先House组件不能只由Window构成,还需要添加一些外部依赖(在这里我们假定为lodash)。我们执行:
这句话会将lodash增添到House的dependencies属性里 我们还需要将Window添加到House的依赖里,执行:
自动检测到window隶属于当前项目,直接采用symlink的方式关联过去。 symlink:符号链接,也就是平常所说的建立超链接,此时House的node_modules里的Window直接链接至项目里的Window组件,而不会再重新拉取一份,这个对本地开发是非常有用的。
发布到npm
接下来,我们只需要简单地执行lerna publish,确认升级的扔赞网源码版本号,就可以批量将所有的package发布到远程。 默认情况下会推送到系统目前npm对应的registry里,实际项目里可以根据配置package.json切换所使用的npm客户端。
更新模块
接下来,我们变更了Window组件,执行一下lerna updated,便可以得知有哪些组件发生了变更。
我们可以看到,虽然我们只变更了window组件,但是lerna能够帮助我们检查到所有依赖于它的组件,对于没有关联的组件,是不会出现在更新列表里的,这个对于相比之前人工维护版本依赖的更新,是非常稳健的。
集中版本号或独立版本号
截止目前,我们已经成功发布了2个package,现在再新增一个Tree组件,它和其他2个package保持独立,随后我们执行lerna publish,它会提示Tree组件的版本号将会从0.0.0升级至1.0.0,但是事实上Tree组件仅仅是刚创建的,这点不利于版本号的语义化,lerna已经考虑到了这一点,它包含2种版本号管理机制。
如果需要各个组件维护自身的版本号,那么就使用independent模式,只需要去配置leran.json即可。
TIPS:
yarn workspaces 命令 在根目录安装 npm 包,以 lodash 为例:
总结
lerna不负责构建,测试等任务,它提出了一种集中管理package的目录模式,提供了一套自动化管理程序,让开发者不必再深耕到具体的组件里维护内容,在项目根目录就可以全局掌控,基于npm scripts,可以很好地完成组件构建,代码格式化等操作,并在最后一公里,用lerna变更package版本,将其上传至远端。
lerna最佳实践
项目地址: GitHub - Mrrabbitan/virtualList 为了能够使lerna发挥最大的作用,根据这段时间使用lerna 的经验,总结出一个最佳实践。下面是计划实现的一些特性。
工具整合 在这里引入的工具都是为了解决一个问题,就是工程和代码的规范问题。
Happy Hacking~~~
Ubuntu离线安装gcc/g++/make/cmake
要离线安装GCC、G++、Make和CMake,首先为GCC/G++/Make获取离线安装包,通过执行以下命令:
bash
sudo dpkg -i *.deb
对于CMake的源码安装,需要从下载的源码文件开始。首先解压cmake-3..2.tar.gz:
bash
tar -zxvf cmake-3..2.tar.gz
然后进入解压后的目录:
bash
cd cmake-3..2
接下来创建构建目录并切换到其中:
bash
mkdir build && cd build
进行bootstrap设置并编译安装:
bash
../bootstrap && make
最后,使用sudo命令确保权限,完成安装:
bash
sudo make install
安装完成后,你可以通过以下命令检查CMake的版本:
bash
cmake --version
以及确认CMake的安装路径:
bash
which cmake
前端开发框架都有哪些(前端开发的框架有哪些)
前端常用的框架有哪些?
web前端的主流框架,下面,我具体给你介绍一下:
1、Angular:Angular是一款优秀的前端JS框架磨腔,Angular有着诸多特性渣败,最为核心的是MVW(Model-View-Whatever)、模块化、自动化双向数据绑定、语义化标签、依赖注入等等。Angular是一个比较完善的前端框架,包含服务,模板,数据双向绑定,模块化,路由,过滤器,账号分享网源码依赖注入等所有功能,在自定义指令后可以在项目中多次使用。
2、React:React可以非常轻松地创建用户交互界面。为你应用的每一个状态设计简洁的视图,在数据改变时React也可以高效地更新渲染界面。React为你程序编写独立的模块化UI组件,这样当某个或某些组件出现问题是,可以方便地进行隔离。
3、Vue:近几年最火的前端框架当属Vue.js了,Vue.js是一个构建数据驱动的Web界面的渐进式框架。Vue.js的目标是通过尽可能简单的API实现响应的数据绑瞎梁衫定和组合的视图组件。Vue对模块很友好,可以通过NPM、Bower或Duo安装,不强迫你所有的代码都遵循Angular的各种规定,使用场景更加灵活。
以上三个就是我给你介绍的关于web前端主流的框架,希望我的回答对你有所帮助
前端开发框架都有哪些
1.Bootstrap
Boostrap绝对是目前最流行用得最广泛的一款框架。它是一套优美,直观并且给力的web设计工具包,可以用来开发跨浏览器兼容并且美观大气的页面。它提供了很多流行的样式简洁的UI组件,栅格系统以及一些常用的JavaScript插件。
2.Fbootstrapp
Fbootstrapp基于Bootstrap并且提供了跟Facebookiframeapps和设计相同的功能。包含用于所有标准组件的基本的CSS和HTML,包括排版、表单、按钮、表格、栅格、导航等等,风格与Facebook类似。
3.BootMetro
BootMetro框架的灵感来自于MetroUICSS,基于Bootstrap框架构建,用于创建Windows8的Metro风格的网站。它包括所有Bootstrap的功能,并添加了几个额外的功能,比如页面平铺,应用程序栏等等。
4.Kickstrap
Kickstrap是Bootstrap的一个变体。它基于Bootstrap,并在它的基础上添加了许多app,主题以及附加功能。这使得这个框架可以单独地用于构建网站,而不需要额外安装什么。你需要做的仅仅是把它放到你的网站上,然后用就可以了。
5.Foundation
Foundation是一款强大的,功能丰富的并且支持响应式布局的前端开发框架,你可以通过Foundation快速创建原型,利用它所包含的大量布局框架,元素以及最优范例快速创建在各种设备上可以正常运行的网站以及app。Foundation在构建的时候秉承移动优先的策略,它拥有大量实用的语义化功能,并且使用Zepto类库来取代jQuery,这样可以带来更好的用户体验,并且提高运行的速度。
6.GroundworkCSS
GroundworkCSS是前端框架家族里面新添的一款小清新框架。它是基于Sass和Compass的一个高级响应式的HTML5,CSS以及JavaScript工具包,可以用于快速创建原型并且建立在各种浏览设备上可以正常工作的网站和app。
7.Gumby
Gumby是一款基于Sass和Compass的简单灵活并且稳定的前端开发框架。
它的流式-固定布局(消察fluid-fixedlayout)可以根据桌面端以及移动设备的分辨率自动优化要呈现的网页内容。它支持多种网格布局,包括多列混杂的嵌套模式。Gumby提供两套PSD的模板,方便你在列和列的网格系统上进行设计。
8.HTMLKickStart
HTMLKickstart是一款可以用来方便创建任何布局的集合HTML5,CSS和jQuery的工具包。它提供了干净,易语言偷源码符合标准以及跨浏览器兼容的代码。
这款框架提供了多种样式表,包括网格,排版,表单,按钮,表格,列表以及一些跨浏览器兼容的web组件比如JavaScript的幻灯片功能,tabs,面包屑导航,包含子菜单的菜单以及工具提示等等。
9.IVORY
IVORY是一款轻量,简单但是强大的前端框架,可以用于到像素宽度的响应式布局。它基于列的响应式网格布局,包含表格,按钮,表格,分仿咐页,拨动开关,工具提示,手风琴,选项卡等网站中常用的组件和样式。
.Kube
最后,如果你的新项目需要一款实在的,不需要复杂的额外功能组件的,足够简单的框架,那么Kube将会是你正确的选择。Kube是一款最小化的,支持响应式的前端框架,它没有强加的样式设计,因此给了你充分的自由来开发自己的样式表。它提供了一些web元素的基备桥纯本样式,比如网格,表单,排版,表格,按钮,导航,链接以及等等。
前端常用的框架有哪些?给大家介绍几个在Web前端界比较优秀的前端框架。
1、Bootstrap
Twitter出品的Bootstrap在业界是非常受欢迎的,以致于有很多前端框架都在其基础上开发,如我们熟悉的WeX5就是在Bootstrap源码基础上优化而来的。我相信大多数接触过前端开发的同学多少都了解过这个优秀的前端框架。Bootstrap是基于HTML、CSS和Javascript的,它简洁灵活,可以使得Web开发更加敏捷。
它世扒运提供优雅的HTML和CSS规范,在jQuery的基础上进行更加个性化和人性化的完善。兼容大部分jQuery插件,并包含了丰富的Web组件,如下拉菜单、按钮式下拉菜单、导航条、按钮组、分页、缩略图、进度条和媒体对象等。自带了个jQuery插件,其中有模式对话框、标签页、滚动条和弹出框等。
2、Foundation框架
Foundation框架总体来看要比Bootstrap略显高大上一点,但他们俩的设计理念都是非常清楚的,Bootstrap有引导的意思,它尝试处理你项目中的一切所需。Foundation有基础、地基及支柱的意思,给你项目中强有力的创造与支持。相对于Bootstrap丰富的组件及插件,Foundation仅提供了有限的几种元素,其目标是,即使你使用预定义的UI元素,也不应该与大家的网站长得太像。搜梁
而Bootstrap则致力于提供所有定义好的元素,这样使得看起来许多网站都差不多。Foundation默认不带图标集,它推荐使用开源字体图标。与Bootstrap一样,Foundation使用网格流式布局将网页划分为列,针对不同的设备显示不同的列数,实现响应式布局。但Foundation不支持旧版本浏览器。其他特性如有兴趣可进一步了解。
3、Curl
Curl是一个命令行工具,用于通过HTTP(s)、FTP和数十种其它协议进行请求。使用Curl可以进行文件下载、检查响应标题和自由访问远程数据。
在Web开发中,Curl经常和RESTfulAPI一起使用,用于测试连接。
#FetchtheheadersofaURL.curl-IFoundCache-Control:privateContent-Type:text/html;charset=UTF-8Referrer-Policy:no-referrerLocation:;ei=0fCKWe6HCZTd8AfCoIWYBQContent-Length:Date:Wed,Aug::GMT#MakeaGETrequesttoaremoteAPI.curlisthenumberofdaysittakesSaturntoorbittheSun.
Curl命令可能比上述代码更复杂。有许多选项用于控制headers、Cookie、身份验证等。了解更多,请阅读Everythingcurl。
4、Tree
Tree是一个小型的命令行实此歼用程序,它将目录中的文件以可视化的方式进行显示。它采用递归运行的方式,遍历每个级别的嵌套并绘制所有内容的格式树。这样就能快速的浏览并查找需要的文件。
tree.├──css│├──bootstrap.css│├──bootstrap.min.css├──fonts│├──glyphicons-halflings-regular.eot│├──glyphicons-halflings-regular.svg│├──glyphicons-halflings-regular.ttf│├──glyphicons-halflings-regular.woff│└──glyphicons-halflings-regular.woff2└──js├──bootstrap.js└──bootstrap.min.js
还可以使用简单的regEx模式来过滤结果:
tree-P'*.min.*'.├──css│├──bootstrap.min.css├──fonts└──js└──bootstrap.min.js
5、Tmux
根据维基的解释,Tmux是一个终端复用器。通俗的说,它是一个能将多个终端连接到单个终端会话的工具。
Tmux允许用户在终端中的程序之间切换,添加屏幕窗格,并将多个终端连接到同一个会话,使其保持同步。在远程服务器上工作时,Tmux特别有用,因为它允许用户创建新的选项卡,而无需再次登录。
6、du
du命令用于生成关于文件和目录的空间使用情况的报告。du很容易使用,可以递归地运行,遍历每个子目录并返回每个文件的大小。
du的常见用例是:当某个驱动器的空间不足,用户不清楚每个存储器的大小。使用此命令可以快速查看每个文件夹所占用的存储空间,从而找到占用最大空间的存储器。
7、AUI
AUI是最近流行起来的,作者声称是专为APIClound设计的一套框架,解决了许多移动端开发实际中遇到的许多问题,是一个纯CSS框架。使用容器+布局+模块的构建方式,JS辅助,更自由更灵活更易于扩展使用。遵循GoogleMaterial设计规范,完美适配各个机型。面向HTML5,使用CSS3实现动画交互,轻量级高性能。AUI是使用MITLicense授权,你可以复制、出售。目前最新版本2.0。
8、AmazeUI
这是称为妹子UI的开源框架,据称是中国首个开源HTML5跨屏前端框架。妹子UI以移动优先为理念,从小屏逐渐到大屏,实现响应式网页。AmazeUI包含+个CSS组件、+个JS组件,更有多个包含不同主题的Web组件。相比国外框架,妹子UI关注中文排版提供本地化支持。面向HTML5开发,使用CSS3来实现动画交互,轻量级高性能。
9、FrozenUI
FrozenUI是一款开源,简单易用,轻量敏捷的移动端框架。基于手Q样式规范,目前全面应用于企鹅手Q增值业务中。基础样式效果简单色调清爽,社区活跃,组件自然不少。包括按钮、列表、表单、通知、提示条、弹出框、选项卡等等常用组件。还包括一个FrozenJs的JS组件库。可以在主流的Android和IOS上应用。基本样式使用离线包的方式减少请求提供快速接入方案。当然,根据网友反映,也存在大大小小的bug。不过总体来说,还是值得一用的。奇怪的是,Github上显示的最后更新时间是一年前,难道已经没人维护了吗?
#Runningthiswillshowthespaceusageofeachfolderinthecurrentdirectory.#The-hoptionmakesthereporteasiertoread.#-spreventsrecursivenessandshowsthetotalsizeofafolder.#Thestarwildcard(*)willrunduoneachfile/folderincurrentdirectory.du-sh*1.2GDesktop4.0KDocumentsGDownloads4.0KMusic4.9MPicturesKPublic4.0KTemplates6.9MVideos
还有一个相似的命令df(DiskFree),使用df会返回有关可用磁盘空间的各种信息。
以上介绍了现在热门的几个Web前端框架,以及它们的主要功能,希望对大家学习Web前端有所帮助。
前端后端框架有哪些?java前端后端都有哪些框架?分
java的前端和后端框架现在比较多,就目前热门的来说:
前端:jspajaxjquaryjssliverlight,很多都是基于js开发的框架,前端是比较好玩的一个东西
后端:基础springhibernatemybatisibatisservletstruts,然后你可以进行不同的组合
比如s***ssissh,按照分层结构就是简单的mvc结构,可以使用modelandview这样的对象返回页面,现在比较常用这个,
关于后端程序员写前端用什么框架更好
推荐两个颜值很高的前端框架:AdminLTE:基于Bootstrap的一套后台系统,有很多现成模板可使用,又好看又好用,必须推荐!官网:FreeBootstrapAdminTemplate预览:AdminLTE2|DashboardGitHub:almasaeed/AdminLTE·GitHub
前端开游桐发框架有哪些
首先我想说明一下,我们通常说的js不是框架,是语言,即javascript,据最新世界编程语言排行榜来看,已经上升到了第7位,发展迅猛,其标准是ECMAScript,现在基本上是基于ECMAScript5。jQuery是用js写的框架,其在DOM操作上有很明显的优势,也是时下很常用的一个js框架。
至于之外还要学习那些框架呢?
如果你说的是js框架,建议先掌握好jQuery,然后还有很多的,比如楼上提到的extjs,近几年比较流行的AngularJS,基于移动端考虑的轻量级仿jquery框架zepto,还有jquerymobile,还有适合写后端或服务端的node,等等。如果是web前端框架,就不仅仅是涉及的js了,还有html和css。个人觉得只有这三种语言都涉及到的框架才能说得上是web前端框架。现在比较火的是Bootstrap,还有Foundation,比较古老的有jqueryUI,easyUI等等,还有其他很多很多。如果还有算上处理方案及版本升级代码迭代等,就要用到百度团队研发的fis这种了。其实内容真的很多很多,前端任重而道远啊~
关于后端程序员写前端用什么框架更好
各大前端框架可以按照“封装度”的标准来区分。设计刚弊纯出的一套网页皮肤,封装度为0。层层封装到可以直接用后台语言写页面,封装度为。那么我是这样来区分前端框架的。
1级——纯html+css放5年前,基本就是用Dreamweaver刚排出来的页面或者网页查看源代码扒下来的皮肤。不涉及到js,就是纯页面皮肤。
2级——bootstrap系列bootstrap的出现是一个里程碑事件。发源于twitter,引入了不少html5/css3的特性。由于它对响应式的支持以及良好的体验,给人一种耳目一新的感觉。其源码,不管是css还是js都值得学习一下,看后经常会有“原来还可以这样做”这种恍然大悟的感觉。不过归根结底是一套ui皮肤+少量js组成的框架,属于封装度偏低的框架。
3~4级——metronic/adminLTE系列基于bootstrap或者其他1级框架,然后集成了各种jQuery插件、富文本编辑器等js库,组成的一个大杂烩工具包和案例库。皮肤基本是基于bootstrap自定义的一套主题。案例比较详尽,开发的时候找到需要的组件把前端代码复制粘贴,再稍微调试一下就能达到良好的视觉效果。根据集成的第三方库的多少,基本可以划分到3~4级封装度这样的范围。这个级别的框架的代码更多的是属于粘合剂,将各种不同的第三方库的前端代码粘合起来租磨咐。
5级——jQuery-ui这里要单独把jQuery-ui拿出来讲,并不是因为它的封装度有多高,而是我认为它是一个分界点。jQuery以下级别的框架,代码以css为主,自身的js代码少,框架量级更轻,更灵活,更适合互联网web产品。jQuery以上级别的框架,属于前端的重度封装,通过框架暴露的接口进行开发,开发人员甚至不需要太多前端知识,只需要详细查看框架的开发文档即可。jQuery以上级别的框架更适合传统管理软件的开发。
6~7级——easy-ui/DWZeasy-ui基于jQuery-ui,不过具有更丰富的组件库。貌似商业版收费很高。听说某大型国企花了大价钱购买下来使用。DWZ是国产框架中我认为综合表现还不错的,完全免费,有问题可以在他们的QQ群里提。其余的之前还用过金蝶的operamasks-ui,不过现在好像已经不更新了。这一类级别的框架还有一个另外的称呼——“富客户端框架”,意思就是重度js框架。使用起来开发效率很高,当年也是一度百花齐放,框架辈出。
8级——extjs系列extjs属于前端框架领域中的庞然大物,封装程度很高,具有自成体系的元素选择引擎和浏览器兼容方案,js写法上也有自己的方式。组件很多很全。只看extjs的官方文档和示例几乎不必学习任何其他的前端知识就可以做出“很漂亮”的前端页面。当然页面很容易“撞衫”。使用时间长了,会对其产生严重依赖,离开extjs,几乎不会写前端页面了。
9级——vaadin/GWT最后一级,也是封装度最高的一级,也就是所谓的使用后台语言写前端。如果说之前的八级至少前端和后端还是相对分离的,后台程序在java中写,前台程序在html或者js中写;那么这一级别的框架简直会颠覆你的认知!只需在后台使用java写好了类和对象,并设置好相关的属性,网页的元素是自动通过后台对象生成的。这当然有好处,妈妈再也不用担心我不会写js和css了。然而就学一下html/css/js真的那么难吗?个人认为,尽管GWT有google的这么强悍的背书,但是这种9级封装的本质上把前后台耦合得更紧密。一个人做一个项目还可以考虑,但是......
Web前端和后端分别是什么语言/框架构建的
zhihu/question/
转
关于后端程序员写前端用什么框架更好
各大前端框架可以按照逗封装度地的标准来区分。设计刚出的一套网页皮肤,封装度为0。层层封装到可以直接用后台语言写页面,封装度为。那么我是这样来区分前端框架的。
1级——纯html+css放5年前,基本就是用Dreamweaver刚排出来的页面或者网页查看源代码扒下来的皮肤。不涉及到js,就是纯页面皮肤。
2级——bootstrap系列bootstrap的出现是一个里程碑事件。发源于twitter,引入了不少html5/css3的特性。由于它对响应式的支持以及良好的体验,给人一种耳目一新的感觉。其源码,不管是css还是js都值得学习一下,看后经常会有逗原来还可以这样做地这种恍然大悟的感觉。不过归根结底是一套ui皮肤+少量js组成的框架,属于封装度偏低的框架。
3~4级——metronic/adminLTE系列基于bootstrap或者其他1级框架,然后集成了各种jQuery插件、富文本编辑器等js库,组成的一个大杂烩工具包和案例库。皮肤基本是基于bootstrap自定义的一套主题。案例比较详尽,开发的时候找到需要的组件把前端代码复制粘贴,再稍微调试一下就能达到良好的视觉效果。根据集成的第三方库的多少,基本可以划分到3~4级封装度这样的范围。这个级别的框架的代码更多的是属于粘合剂,将各种不同的第三方库的前端代码粘合起来。
5级——jQuery-ui这里要单独把jQuery-ui拿出来讲,并不是因为它的封装度有多高,而是我认为它是一个分界点。jQuery以下级别的框架,代码以css为主,自身的js代码少,框架量级更轻,更灵活,更适合互联网web产品。jQuery以上级别的框架,属于前端的重度封装,通过框架暴露的接口进行开发,开发人员甚至不需要太多前端知识,只需要详细查看框架的开发文档即可。jQuery以上级别的框架更适合传统管理软件的开发。
6~7级——easy-ui/DWZeasy-ui基于jQuery-ui,不过具有更丰富的组件库。貌似商业版收费很高。听说某大型国企花了大价钱购买下来使用。DWZ是国产框架中我认为综合表现还不错的,完全,有问题可以在他们的群里提。其余的之前还用过金蝶的operamasks-ui,不过现在好像已经不更新了。这一类级别的框架还有一个另外的称呼——逗富客户端框架地,意思就是重度js框架。使用起来开发效率很高,当年也是一度百花齐放,框架辈出。
8级——extjs系列extjs属于前端框架领域中的庞然大物,封装程度很高,具有自成体系的元素选择引擎和浏览器兼容方案,js写法上也有自己的方式。组件很多很全。只看extjs的官方文档和示例几乎不必学习任何其他的前端知识就可以做出逗很漂亮地的前端页面。当然页面很容易逗撞衫地。使用时间长了,会对其产生严重依赖,离开extjs,几乎不会写前端页面了。
9级——vaadin/GWT最后一级,也是封装度最高的一级,也就是所谓的使用后台语言写前端。如果说之前的八级至少前端和后端还是相对分离的,后台程序在java中写,前台程序在html或者js中写;那么这一级别的框架简直会颠覆你的认知!只需在后台使用java写好了类和对象,并设置好相关的属性,网页的元素是自动通过后台对象生成的。这当然有好处,妈妈再也不用担心我不会写js和css了。然而就学一下html/css/js真的那么难吗看个人认为,尽管GWT有google的这么强悍的背书,但是这种9级封装的本质上把前后台耦合得更紧密。一个人做一个项目还可以考虑,但是一个团队前......
java编程前端和后端分别包括哪些技术?
前台。jsphtmlJavaScriptjQuery各种jQuery的前台框架。
后台。javastruts2springhibernateabitasjdbcejbwebservice各种后台框架
高级点的有云计算,大数据
关于后端程序员写前端用什么框架更好
时间过去好久了,问题想必你已经想清楚了。我再简单说说。如果你自己能包揽前后台,理解这个肯定没问题。网站能运行,说白了是这么几步。客户端请求--》服务端响应HTML.--》用户在网页上进行操作(即请求)--》服务器响应操作(新页面或ajax。
关于后端程序员写前端用什么框架更好
程序员用框架不能算是“写前端”,只是现成框架套用而已。
后台管理系统,前端框架用什么最好
前端js框架太多了,
2024-11-28 05:352023人浏览
2024-11-28 05:14700人浏览
2024-11-28 04:072447人浏览
2024-11-28 03:21131人浏览
2024-11-28 03:191321人浏览
2024-11-28 03:18116人浏览