源码怎么打包
㈠ vscode源码打包
1.打包方法: yarn run gulp vscode-win32-x64-archive,打包后生成的包在 .build\win32-x64\archive\VSCode-win32-x64.zip , 这种方法目前看似乎是从某个文件夹直接压缩。在这个之前,需要先做 yarn的动作。
2.另一种方法: yarn run gulp vscode-win32-x64-min, 打包后,会在 vscode 当前目录的上一级生成目录VSCode-win32-x64,带 min 和不带 min 的编译方法相比,min对于其中的js文件做过体积简化。我们编译应该用带min的方式来编译。
㈡ Webpack打包流程细节源码解析(P2)
此篇博客紧承上一篇,上片讨论了我们的webpack整个处理单个文件的流程,这一节主要说一说webpack的文件打包问题,其实本身是比较简单的,但是有异步块和html-plugin的加入,使这个步骤变得尤为复杂,这里先介绍几个重要的概念:
上一节中,我们成功的对每个文件进行了处理,并通过了process的方法对所有入口文件以及他们的依赖文件进行了处理,获得了最初的依赖文件列表,现在我们就可以对资源的依赖进行优化处理,本片的内容将从webpack/lib/Compiler.js:510的断点开始逐步的对源码进行分析
在seal之前,由于一轮compilition已经执行完成,先调用finish方法进行收尾处理与之对应的是我们注册的finish-moles事件,
这里我们首先看到的又是index.ejs这个老朋友,由于他是单独的文件经过了loader处理没有获得额外的处理函数的依赖,所以最终这里看到的mole实际上是它的js外壳包起来的ejs文件,此阶段也还没有进行资源hash的注入等等
这里有一个FlagDependencyExportsPlugin进行了操作,听名字可能就听出来了,他是对我们资源中的export使用进行一个标志的作用, 和我们最终做出的tree shaking效果可能是相关的
调用seal事件处理
处理我们的preparedChunk,这个东西是我们刚好在进行addEntry的时候添加上的不知道你们还记不记得,中途就没有添加过新的,所以讲道理,一个entry是只用一个的,但是这里使用了一个数组不知道有什么用意
然后把这个入口模块添加到了block里面,过后打包也是从block里面拿数据,block里面的东西会被打包成为单独的文件,但是还是工作在之前的上下文中,这里可以通过看一下这里的import即是我们之前在路由文件中通过import函数设置引入的动态加载路由资源
进入到函数,就开始处理我们之前做好准备的block了,这里这是一个不断处理依赖的过程,但是没有使用递归的做法,毕竟文件太多了,不断的进行递归会浪费很多空间,取而代之的是使用queue进行记录,处理过程中不断把新的需要处理的模块放到queue里面等待下一步处理
在每一步的处理中
处理完这一波循环依赖过后,本身的依赖树结构变得扁平化,之前一层一层的模块通过dependency连接起来作为一个树的结构,而现在变成了顶层最终的几个chunk
可以看到我们最终在这个入口(entry)设置中拿到了9个chunk,她们都有_moles属性,我们的所有依赖都是放到这里面的,是用的一个Set进行存储,其中的依赖关系则是通过origins和reason等标识进行模块间关系的连接的
还可以将我们的入口chunk和异步加载的chunk进行一些对比(上面的是入口文件),下面的chunk中出现的origins就是指向我们之前的router那个mole
这个图里也可以看到,两个chunk实际上按照自己的路子搜集了所有的依赖,结果导致了_moles的文件数量都达到了一千多个,这就是我们常使用的CommonChunk插件需要处理的地方了,稍后进行讨论
这轮处理我们成功的把主要的入口mole和异步加载的模块区分开了,然后开始按照类似的逻辑处理我们的第一个入口模块
这个时候拿到chunkDependencies进行处理,这就是之前那个存储block的东西,但是有个很奇怪的地方,就是这里面居然只有三个chunk,而不是和上面的一样是9个也不是只有一个入口模块,这就让人无从下手了(我异步加载的模块并不是一样的,而且这些模块之间没有没相互依赖)
喜闻乐见进行第二次处理,首先取出一个chunk拿到对应的存储在value中的deps,对每一个项目添加上了他们的parent,但是有个组件就是用来removeParent的
在RemoveParentMolesPlugin这个插件中,针对每个mole都做了处理,看看这些模块在哪些chunk之中有被使用到,把他们所存在的chunks按照id记录下来,并改变她们的reason为几种统一的chunk组合数组。这样就做到了每个mole知道了自己被哪些chunk使用,但是从之前的单一reason到现在的多reason具体不知道有什么用(恩。。可能是为作用域提升做准备)
然后嘛,移除空的模块,不需要多解释
然后这层处理就算完啦,主要进行了模块的依赖梳理和拆分,并为他们添加上了指向父节点的指针(话说之前不是有origins吗)
对模块进行排序工作,不过只是按照索引进行排序罢了,那个按照出现概率进行排序处理的插件不是在这里工作的
又是那个flag的插件进行了处理,但是只是把所有模块的used设置为了true,还有为一些被依赖的mole设置上他们的usedExports为true
ChunkConditions插件用于监视模块上是否有chunkCondition函数,并返回他的执行结果,如果有模块的此函数返回了false,那么将会重写这个模块(重写即是重新添加进入parent的链接以及reason等的设置)并且还会返回true,到至此过程不断执行直至condition全部OK
RemoveParentMolesPlugin这个插件的作用有点玄乎,看样子是对每个chunk进行处理,看对于多个chunk中都有的某一些mole,会直接把他们的reason设置为主要的入口chunk,而后把当前chunk中的mole移除掉(话说这个事情不是应该Common来做吗)
然后移除所有空的模块,再就是移除重复的模块了(话说一直用set神他妈还会有重复的)
然后进行各种优化,比如出现的概率大的放到前面,这里还是做了mole和chunk两种优化,也是有毛病,就像我们的react项目中可以知道react的使用次数最多,那么他就被放到了最钱前面,紧随其后的是echart等
HashedMoleIdsPlugin插件为我们的模块计算出它的id,默认是通过md5进行计算,解出来的是base64的,而且计算的参数也仅仅只是通过模块的libId进行hash,而这个libhash只是相对位置,连绝对的都不是,所以算下来这个东西能够当成单个文件的hash了
applyMoleId,到这里你可能会想,诶之前不是已经设置好每个元素的id了吗,为什么还要搞这么个函数专门处理,我们在上一个生成id的时候实际上得到的id是根据我们的设置进行了截断的,实际上拿到的hash碰撞的概率非常大,我们看看下面这个筛选的处理就可以知道,1885个模块里面竟然又3个重复的id,这种时候就要特殊处理了
执行sortItemsWithMoleIds依据id进行排序,不只是最外面的chunk,就连reason里的id也会被重新排序,也是蛮逗的,这里直接用的是id做比较并没有判断类型,也就是说把数字和字符串会混到一起,就算你是class也会拿valueOf出来比较,想想还是蛮刺激的,不过其实比较完成也没有太特殊的用途就这么随意一点也好
中间一些处理recordId的我忽略掉了
然后开始处理hash了,这里的hash具体使用了哪些参数和长度是多少呢
可以在此阶段添加hashSalt即噪声,给hash值添加一些特征
进入mainTemplate的处理函数中,添加了一些字符串参数和数字参数,并且调用了mainTemplate的hash插件,但是她们的执行过程并不是保证我们最后生成的文件中能够有结果的hash值,便于请求对应的资源文件,而是仅仅在hash的过程中添加了一些干扰的路径参数等
最终一轮hash下来,chunk会得到自己的renderHash,而compilation会得到一个针对编译过程的hash,这个hash就跟我们的所有资源扯上关联啦,所以每次都是新的
创建模块资源咯~
这些文章写的都有点水,相当于是阅读源码时候做的笔记了,看看图个乐子吧
㈢ gradle解压源码,重新打包
这几天工作上遇到一个问题,三方的jar包在liunx下解压不了,用gradle又能正常编译,我们的apk是在liunx下用mk进行编译的,编译的过程中需要对jar包进行解压,这样就导致编译失败。
错误信息如下:以后再遇到这个错误,可能就jar包的问题。
FAILED: /bin/bash -c "(mkdir -p out/target/common/obj/java_LIBRARIES/xxx-sdk_intermediates/classes.jack.tmpjill.res ) && (unzip -qo /home/x/xx/xxx/APK92_GNBJ_EDO/code/libs/xxx-sdk-java20171027120314.jar -d out/target/common/obj/JAVA_LIBRARIES/xxx-sdk_intermediates/classes.jack.tmpjill.res ) && (find out/target/common/obj/JAVA_LIBRARIES/xxx-sdk_intermediates/classes.jack.tmpjill.res -iname \"*.class\" -delete ) && (JACK_VERSION=3.36.CANDIDATE out/host/linux-x86/bin/jack @build/core/jack-default.args --verbose error -D jack.import.resource.policy=keep-first -D jack.import.type.policy=keep-first -D jack.android.min-api-level=1 --import /home/x/xx/xxx/APK92_GNBJ_EDO/code/libs/xxx-sdk-java20171027120314.jar --import-resource out/target/common/obj/JAVA_LIBRARIES/xxx-sdk_intermediates/classes.jack.tmpjill.res --output-jack out/target/common/obj/JAVA_LIBRARIES/xxx-sdk_intermediates/classes.jack ) && (rm -rf out/target/common/obj/JAVA_LIBRARIES/xxx-sdk_intermediates/classes.jack.tmpjill.res )" warning: stripped absolute path spec from / mapname: conversion of failed ninja: build stopped: subcommand failed. build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed
解决方法:对jar包源码重新打包
解压jar包源码,注意,是带源码的jar包,如果是编译过的jar,是不能重新打包的。
步骤:
1.新建build.gradle文件,因为gradle会默认找到当前目录下的build.gradle下的文件去执行;
2.在终端执行gradle unzip,执行这个task
以下命令将这个目录 app/libs/xxx-sdk-java20171027120314.jar 下的jar包解压到了 unpacked/dist 目录。
解压之后的源码就是文件夹,重新打包的时候需要注意,包名和源码的路径名一致。现在利用Android studio进行打包。
步骤:
1.新建lib mole,选择Android Libeary/Java Library;
2.注意修改包名与jar包路径相同,eg:jar包解压之后的路径 dist/com/example/api ,那么为了确保新生成的jar包里的Java文件import路径相同,mole的包名也要命名为 com.example.api ;
3.将解压之后的源码java文件复制到lib model中;
4.在 app mole 下添加 lib mole 依赖。这是一种取巧的方法,当你添加了lib mole依赖之后,项目会重新rebuild,这个过程会将mole依赖编译成jar包,存放在lib mole的 build/libs 目录下,由于Android Studio版本不同,这个目录可能有有所不同,但是都在build目录下,找新的jar包就可以了。
这一部可能会报jar包找不到,或者lib mole中的import失败,可能是因为lib mole依赖的jar包没导入,导入之后在lib mole的build.gradle里配置一下就可以了。
这个时候,其实直接用这个jar包也可以了,如果向修改jar包名字,可以执行下面的gradle命令:
想了解更多可以参考 这里
然后在项目里测试一下jar包就可以了。
重新打包之后就可以在liunx下解压了,正常编译通过。
最后记录一下mk编译的一个错误 # [ERROR: Dex writing phase: classes.dex has too many IDs. Try using multi-dex](https://stackoverflow.com/questions/45472852/error-dex-writing-phase-classes-dex-has-too-many-ids-try-using-multi-dex) 在stackoverflow上找到了解决方法。
在mk文件中添加
参考:
https://stackoverflow.com/questions/39457116/gradle-build-hanging-when-jackoptions-is-enabled-for-java-1-8
https://stackoverflow.com/questions/45472852/error-dex-writing-phase-classes-dex-has-too-many-ids-try-using-multi-dex
㈣ 如何将一个java项目源代码打包成jar文件
右键点击项目,选择Export,找到java-JAR file点击next,选择jar的保存路径,一般保存到桌面就行了,点击finish,就OK了
㈤ 如何把github上下载下来的maven源代码zip文件打包成可运行的jar文件
用IDEA克隆项目,再把maven与IDEA整合,如图所示点这个:
再点绿色三角,就可以打包。
这项目真大,等我下好直接把jar包发给你。
㈥ 源码如何打包
一般有专门的安装包制作工具!
㈦ maven中如何打包源代码
在pom.xml中添加:
<build>
<plugins>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>2.1</version>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
配置中指定了phase为compile,意思是在生命周期compile的时候就将源文件打包,即只要执行的mvn命令包括compile这一阶段,就会将源代码打包。同样,phase还可以指定为package、install等等。
㈧ 下面的源代码怎么打包成一个EXE文件
首先打开终端,使用pip先安装pyinstaller,语法:pip install pyinstaller。然后使用pyinstaller来打包。打开终端,输入pyinstaller 文件名.py。注意,pyinstaller需要找得到你的文件,就是说你的终端要切换到你的文件所在的目录。
如果我有帮到你,请推荐一下。谢谢
㈨ php怎么打包小程序
php源码怎样打包APP
php源码怎样打包APP_最新影视小程序源码 可以打包成影视双端APP 带详细图文搭建教程...
猴小贼
原创
关注
0点赞·1270人阅读
支持投屏、倍速播放、分享按钮、联系客服、返回按钮,转发等等
改源码并非泛滥的SG 可以打包成双端APP、支付宝、QQ、网络、微信、
这四个平台通用源码,
共同一个后台,不依赖微擎,独立安装
后台功能太多了,我也就不一一截图了,
大家都想问,为什么发出来呢,因为我购买了正版,需要二次授权,直接找人破jie
发出来给大家分享一下
程序还是挺不错的,希望大家喜欢
API站点
环境要求
n API是TP5框架,CMS是苹果cms10(TP框架)
n API(视频接口管理后台)及CMS(苹果cms或其他影视站点)是两个站点,需要用两个域名或子域名创建
运行环境
服务器安装 宝塔面板 (相关安装教程参照宝塔面板官方教程)
l PHP7.0或以上版本
l MYsql5.6
l Nginx
PHP开启
fileinfo
sg11
扩展。
Nginx伪静态配置:
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
}
CMS站点环境
PHP >= 5.6
MYSQL5.6
Nginx
环境搭建
关键目录
/public/ 站点根目录
数据库导入
¡ 直接上传API目录下的 data.sql 并导入
关键文件
/config/app.php api站点小程序appid相关信息配置(翻到最下面)
/config/database.php api站点的数据库配置文件
/application/videos/model/Videos.php 视频数据 CMS站点的数据库用户名及密码
/application/videos/model/VideosType.php 视频分类数据 CMS站点的数据库用户名及密码
以上文件需要根据实际情况配置相关参数。
/config/database.php需配置当前api站点的相关数据库信息。
/application/videos/model/Videos.php 及 /application/videos/model/VideosType.php 需配置视频CMS站点的数据库信息。
后台介绍
API后台地址: 域名/admin.php
API及CMS后台登录帐密:admin 123123
CMS站点
环境要求
¡ 同API站点
数据库导入
l 直接上传CMS目录下的 maccms.sql.gz 并导入(如果你已有苹果CMS10,不必再进行此操作,直接配置你的cms数据库用户名及密码即可)
关键目录
/ 站点根目录
CMS后台地址:域名/admin.php
关键文件
/application/database.php cms项目数据库配置文件
采集站搭建教程这里就不多说了,每个资源站点顶部都有对应的帮助教程的,对照着他们的教程做就可以了
㈩ 如何把github上下载下来的源代码zip文件打包成可运行的jar文件
既然已经安装好maven库和JDK,不需要 eclipse , 只需要执行一个命令就可以了,
打开命令提示符窗口,进入到源码所在目录,执行命令
mvn package
等待编译打包完成,在 target 目录下就可以了找到 jar 包了。