mpvue 生成字节跳动小程序的问题!!
初始化项目文件
$ vue init mpvue/mpvue-quickstart fuck
$ cd fuck
$ npm install
这个时候就初始化好了,接下来
$ npm run dev:tt
生成字节跳动的小程序项目,就是 'dist/tt/' 目录。
运行字节跳动开发者工具
打开字节跳动开发者工具,导入上一步生成的目录,等待编译,结果会发现:
报错了,我把报错文本拷贝出来:
Error: Unable to determine project type, microApp needs app.json,microGame needs game.json.
at BuildDist (/Applications/bytedanceide.app/Contents/Resources/app.asar.unpacked/node_modules/byted-tma-pack/dest/index.js:1:64782)
at /Applications/bytedanceide.app/Contents/Resources/app.asar.unpacked/node_modules/byted-tma-pack/dest/index.js:1:67510
at i (/Applications/bytedanceide.app/Contents/Resources/app.asar.unpacked/simulator-sdk/dist/preload/compilePreload.3b7fe257013e358e1fa6.js:29:15959)
详细报错信息请查看控制台
报错意思是无法判断项目是小程序还是小游戏,因为找不到 app.json 或 game.json 文件。
然后 app.json 明明就安静的躺在那里啊,什么情况!
根据报错信息找到报错文件 /Applications/bytedanceide.app/Contents/Resources/app.asar.unpacked/node_modules/byted-tma-pack/dest/index.js
美化一下 js 代码,找到报错的地方:
async function BuildDist(e) {
let {
compile: t,
splitJS: r,
isWatch: n,
buildType: a,
compile_mode: o
} = e || {};
const i = Date.now(),
s = commonjsGlobal.argvProject.tea;
console.time("-> microapp/index");
const l = microapp;
console.timeEnd("-> microapp/index"), console.time("require microgame/index");
const c = microgame;
console.timeEnd("require microgame/index"), debug_1.log(`[start build ${colors.red(a)}]`);
try {
switch (a) {
case "app":
console.time("/// ALL BUILD DONE ///"), await l(r, n, o), console.timeEnd("/// ALL BUILD DONE ///");
break;
case "game":
await c(r);
break;
default:
throw new Error("Unable to determine project type, microApp needs app.json,microGame needs game.json.")
}
} catch (e) {
if (commonjsGlobal.argvProject.isIDE) {
if (!commonjsGlobal.argvProject.isIDEForThird) return commonjsGlobal.argvProject.finishBuildCb(e)
} else debug_1.error(e), process.exit(1)
}
const p = Date.now() - i;
console.log("BuildDist:", `${p}ms`), s.collectEvent(teaConfig_1.totalCompileTime, {
compile_time: p,
compile_mode: o
}), await afterBuild(a, t)
}
就是在这个函数 throw Error 的,这个 a
有问题,也就是 buildType
有毛病,继续回溯,找到:
var r2d2 = async function(e, t) {
let {
isProduction: r,
sourcePath: n,
isIde: a,
tarPath: o = "",
compileChannel: i = "",
assetsOrder: s,
minify: l
} = e;
__cwd$1 = n, targetFilePath = o;
const c = getProjectType(),
p = "-d" === a || "-l" === a;
let u = tea({
__cwd: __cwd$1,
buildType: c,
isIDE: p
}),
h = {
isProduction: r,
isIDE: p,
isIDEForThird: "-l" === a,
isRemoteDebugForTT: "-r" === a,
targetPath: targetFilePath,
__cwd: __cwd$1,
finishBuildCb: t,
compileChannel: i,
assetsOrder: s,
minify: l,
tea: u
},
g = {
compile: !1,
splitJS: !1,
isWatch: !1,
buildType: c,
compile_mode: "all"
};
commonjsGlobal.argvProject = h, "-c" === r ? (g.compile = !0, g.splitJS = !0, commonjsGlobal.argvProject.isIDE && !commonjsGlobal.argvProject.isIDEForThird ? (g.isWatch = !0, WatchCompile(g)) : await BuildDist(g)) : ("-b" === r && (g.splitJS = !0), Clear([path$2.resolve(__dirname, "../public/__dist__*"), path$2.resolve(__dirname, "../public/app.ttpkg.js")]).then(() => {
ServePbulic(), g.isWatch = !0, WatchCompile(g)
}))
};
也就是 getProjectType
会返回 buildType
,它的返回值有猫腻,再看这个函数:
function getProjectType() {
const e = readjson.sync(`${__cwd$1}/project.config.json`).miniprogramRoot || "";
return fs.existsSync(path$2.join(__cwd$1, e, "app.json")) ? "app" : fs.existsSync(path$2.join(__cwd$1, e, "game.json")) ? "game" : "unknow"
}
咦!!它读了 project.config.json
,然后根据文件里 json 中的 miniprogramRoot 来寻找 app.json 和 game.json
马上看一下 project.config.json 文件,果然里面配置了 miniprogramRoot,而且还是 "miniprogramRoot": "dist/wx/"
这就显然不对了,最起码也该把 wx 换乘 tt 吧。
然而就算换了 tt 也不行,miniprogramRoot 是个相对路径,相对于当前项目路径,也就是 fuck/dist/tt/ 目录,其实也就是当前目录,所以这个值应该是
{
"miniprogramRoot": "./"
}
然鹅,然鹅,直接修改这个文件并不合适,应该找到 fuck 目录下单的 project.config.json,修改它里面的 miniprogramRoot,这样就每次自动生成正确的文件了。
改好之后,mpvue 自动重新编译生成新的项目文件,在字节跳动开发者工具中点击编译,pia~,页面出来了,beautiful~
在手机上预览一下,OK~
最后
我最终是直接吧 "miniprogramRoot": "dist/wx/" 这一句删掉的。效果一样
mpvue 生成字节跳动小程序的问题!!的更多相关文章
- 基于c编写的关于随机生成四则运算的小程序
基于http://www.cnblogs.com/HAOZHE/p/5276763.html改编写的关于随机生成四则运算的小程序 github源码和工程文件地址:https://github.com/ ...
- [转载]使用mpvue搭建一个初始小程序
1. 初始化一个 mpvue 项目 现代前端开发框架和环境都是需要 Node.js 的,如果没有的话,请先下载 nodejs 并安装. 然后打开命令行工具: # 1. 先检查下 Node.js 是否安 ...
- 使用mpvue搭建一个初始小程序
1. 初始化一个 mpvue 项目 现代前端开发框架和环境都是需要 Node.js 的,如果没有的话,请先下载 nodejs 并安装. 然后打开命令行工具: # 1. 先检查下 Node.js 是否安 ...
- 小程序开发总结一:mpvue框架及与小程序原生的混搭开发
mpvue-native:小程序原生和mpvue代码共存 问题描述 mpvue和wepy等框架是在小程序出来一段时间之后才开始有的,所以会出现的问题有:需要兼容已有的老项目,有些场景对小程序的兼容要求 ...
- uniapp如何生成自己的小程序码并且携带参数
生成小程序码需要用到的参数appId appSecret这两个参数可以再微信公众平台里面登录获取 也可以用测试号里面的获取小程序码步骤1.首先要请求官方的API`https://api.weixin ...
- 记一次用mpvue框架搭建的小程序
介绍 mpvue (github 地址请参见)是一个使用 Vue.js 开发小程序的前端框架.框架基于 Vue.js 核心,mpvue 修改了Vue.js 的 runtime 和 compiler 实 ...
- mpvue——API请求封装(小程序原生)
前言 能用,但不是最好的方法,最好的还是fly,因为为了以后多平台的考虑,最好使用fly.js,做之前先关闭校验合法域名,因为我没在后台进行配置 后台进行配置合法域名,按着官方给的配置就OK了,这里就 ...
- uni-app开发小程序准备阶段
1.软件安装 开始之前,开发者需先下载安装如下工具: HBuilderX:官方IDE下载地址 下面开发工具根据需求进行安装: 微信小程序开发工具安装 https://developers.weixin ...
- 微慕WordPress小程序增强版
2017年1月9日,张小龙在2017微信公开课Pro上发布的微信小程序正式上线.在过去的2年多的时间里,微信小程序领头,各大互联网平台也不甘落后,陆续推出自己的小程序.2018年7月4日,百度智能小程 ...
随机推荐
- Querydsl与SpringBoot集成
Querydsl为大多数数据库提供了一种基于Java的类型安全,类SQL的查询方式.相比JPA,Querydsl能提供更加强大的查询方式,比如关联查询.相比MyBatis,Querydsl省去了XML ...
- C实现奇偶校验
奇偶校验原理(来自百度百科):奇偶校验(Parity Check)是一种校验代码传输正确性的方法.根据被传输的一组二进制代码的数位中"1"的个数是奇数或偶数来进行校验.采用奇数的称 ...
- GhostScript 沙箱绕过(命令执行)漏洞(CVE-2018-16509)
影响范围: Ghostscript 9.24之前版本 poc地址 https://github.com/vulhub/vulhub/blob/master/ghostscript/CVE-2018-1 ...
- Docker安装Kong API Gateway并使用
我最新最全的文章都在南瓜慢说 www.pkslow.com,文章更新也只在官网,欢迎大家来喝茶~~ 1 简介 Kong不是一个简单的产品,本文讲的Kong主要指的是Kong API Gateway,即 ...
- 图解 HTTP 连接管理
熟悉我的小伙伴都知道,我之前肝了本<HTTP 核心总结>的 PDF,这本 PDF 是取自我 HTTP 系列文章的汇总,然而我写的 HTTP 相关内容都是一年前了,我回头看了一下这本 PDF ...
- SpringCloud升级之路2020.0.x版-4.maven依赖回顾以及项目框架结构
本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford 我们先来回顾下 m ...
- [论文阅读] LCC-NLM(局部颜色校正, 非线性mask)
[论文阅读] LCC-NLM(局部颜色校正, 非线性mask) 文章: Local color correction using non-linear masking 1. 算法原理 如下图所示为, ...
- const变量通过指针修改问题
const的变量在特定情况下可以通过指针修改,但是在另一些情况下是不能通过指针修改. 以下是VC6下才测试. 1. 不能修改的情况 #include int const a = 10; void ma ...
- LiteFlow 2.6.0版本发行注记,项目逻辑解耦的利器
前言 自从LiteFlow 2.5.X版本发布依赖,陆续经历了10个小版本的迭代.社区群也稳固增长,每天都有很多小伙伴在问我问题. 但是我发现最多人问我的还是:什么时候能支持界面编排? 从LiteFL ...
- Spring MVC+javamail实现邮件发送
Spring MVC+javamail实现邮件发送 开启邮箱的POP3/SMTP服务(这里以QQ邮箱举例) 设置 --> 账户 -- > 开启POP3/STMP服务,然后得到一个授权码. ...