热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我的weex开发之路

认识比较浅薄,单纯从使用方面入手,整理了两个半小时,有错误的地方还请指出。1.构建项目创建一个项目之前,首先需要选取合适的工具,目前使用比较广的两个weex脚手架有weexpack
认识比较浅薄,单纯从使用方面入手,整理了两个半小时,有错误的地方还请指出。
1. 构建项目

创建一个项目之前,首先需要选取合适的工具,目前使用比较广的两个weex脚手架有weexpack和weex-toolkit。

weex-toolkit(创建的weex项目没有ios和android包)

  • weex init weex 创建项目

  • 修改weex.html文件,将./node_modules/weex-vue-render/index.js修改为./node_modules/weex-vue-render/dist/index.js

  • cnpm install 加载依赖包

  • package.json中的scripts配置"app": "npm run build & npm run dev & npm run server"

  • npm run app 启动项目

目录结构如下图:
《我的weex开发之路》

weexpack (创建的weex项目有ios和android包)

  • weexpack create weex 创建项目

  • weexpack platform add android 添加android

  • weexpack platform add ios 添加ios

  • weexpack run ios 模拟器运行

目录结构如下图:
《我的weex开发之路》

因为我们不打包android和ios,只需要将写好的页面打包成.weex.js文件供ios和android开发人员调用,所以采用了weex init的构建方式。

2. 工具

Weex Devtools

Weex Devtools是Weex开发调试必备的神器,安装好后,终端进入到项目目录,运行weex debug 会自动打开页面

《我的weex开发之路》

扫二维码后

《我的weex开发之路》

点击Inspector可以看页面信息,我们打开Debugger,然后扫描打包好的js文件二维码就可以开始调试了。

《我的weex开发之路》

注: 箭头所指处选debugger,我因为手贱选了个别的,导致好几天console里没有内容提示,还以为版本问题,后来研究了下,发现这里选错了。

3. 遇到的问题

官方demo跑不通

解决:

高一点版本的weex-vue-render里index.js路径改变,导致。修改weex.html文件,将./node_modules/weex-vue-render/index.js修改为./node_modules/weex-vue-render/dist/index.js

使用vue-resources获取接口数据, weex web上好的,但是weex-playground中跑不通,一片空白,错误信息:

[undefined:344:31] ReferenceError: Can't find variable: document
addStyle
addStylesToDom
exports
__webpack_require__
__webpack_require__
__webpack_require__
__webpack_require__
anonymous
a@main.js:4:16690
main.js:7:8740

解决:

weex中不支持document和window,换成其它方式。weex不支持vue-resources,改成weex支持的fetch

里loading一直没效果

解决:

中使用refresh就没法用loading,去掉refresh模块

webpack报错,错误信息 ERROR in Entry module not found: Error: Cannot resolve 'file' or 'directory' /Users/xx/xx/code/weex/app.js in /Users/xx/xx/code/weex

解决:

开始一直以为是webpack入口没配置对,检查很多遍,各种测试后,发现这里真的没问题

// entry: entries
entry: {
app: path.resolve('./app.js')
}

后来找到问题出自

resolve: {
extensions: ['.js', '.vue', '.json']
},

原因是修改了默认的这个配置后,第一个空项不能省略,应该配置为

extensions: ['', '.js', '.vue', '.json']
},

错误信息 Cannot resolve module 'sass-loader'

解决:

缺少node-sass 或 sass-loader
npm install node-sass sass-loader --save-dev
把sass-loader安装成了”scss-loader”: “0.0.1”,也是服了我自己。

接口地址只能获取本地数据,配置test环境失败

解决:

server.js中加一层代理

require('http-proxy-middleware')
// api代理
var proxyTable = config.test.proxyTable
Object.keys(proxyTable).forEach(function (context) {
var optiOns= proxyTable[context]
if (typeof optiOns=== 'string') {
optiOns= { target: options }
}
server.use(proxyMiddleware(context, options))
})
// proxyTable数据
proxyTable: {
'/api': {
// 测试服务器
target: 'http://ip地址:端口号/xx',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
},
...
}

weex接口调用,fetch的headers某些字段始终设置不上

解决:

fetch的headers只能设置下面这些字段
参考: https://developer.mozilla.org…

● 人为设置了对CORS安全的首部字段集合之外的其他首部字段。该集合为:

○ Accept
○ Accept-Language
○ Content-Language
○ Content-Type (but note the additional requirements below)
○ DPR
○ Downlink
○ Save-Data
○ Viewport-Width
○ Width

● Content-Type 的值不属于下列之一:

○ application/x-www-form-urlencoded
○ multipart/form-data
○ text/plain

stream的fetch使用get方式请求接口,url都会自动加上&undefined,官网的例子也不例外。原本普通接口多加一个undefined也没太大影响,但是我们项目是需要根据url参数计算签名的,所以一直签名不通过。

《我的weex开发之路》

解决:

找到源码出处
《我的weex开发之路》
《我的weex开发之路》
《我的weex开发之路》

weex-vue-render第2753行对get进行了特别处理,第2764行的url拼接了body和hash,因为body没有传值,所以是undefined,注释掉url+=这行就没有undefined了,但是修改node_modules中的包内容显然不是一个合理的解决方案。
于是把get方式传值改为body传过来,web端好了,签名没有问题,但是真机上还是报错,排查后发现问题出在get中使用了body传值,找到开发文档,
http://weex.apache.org/cn/ref…
《我的weex开发之路》
然后我凌乱了,为什么明明不能传body你的源码里又要有那么一行代码url += (config.url.indexOf('?') <= -1 ? '?' : '&') + body + hash;。没办法,最后使用了一个超级笨的办法解决了。在签名计算的时候人为的给url加上“&undefined&#8221;,计算好签名后,web中fetch参数中的url也要加上“&undefined&#8221;,但是真机上是不会有&undefined的,所以真机上的url需要去掉undefined,好了问题解决了。

storage中的getItem(key, callback)封装后,页面没拿到数据。

解决:

storage异步造成的,使用promise解决

const p1 = new Promise(function (resolve) {
storage.getItem(key, event => {
let ls = event.data || ''
let d = secret.decrypt(ls) // 对密文字符串进行解密。
d = typeof d === 'object' ? JSON.parse(d) : d
resolve(d)
})
})
Promise.all([p1]).then(function (result) {
callback(result)
}).catch(function(err){
console.log('error', err)
})

页面跳转外部非js链接,在网页上是好的,但真机上一片空白

navigator.push({
url: 'https://segmentfault.com/write?freshman=1',
animated: "true"
})

解决:

新建一个vue文件,使用weex的web标签包一层,然后打包成weex.js格式,普通调用就好了。

跳转weex.js页面传参

解决:

直接在url后面拼接参数,新页面使用this.$getConfig().bundleUrl获取url解析一下就好了。

post提交数据的是后报错415

解决:

头部信息一定要和后端协议好,不允许不一致。


推荐阅读
  • 根据不同环境需求,利用 Vue CLI 的 `npm run build` 命令对项目进行定制化打包,如测试、预发布和生产环境。通过配置 `process.env` 变量,实现不同环境下接口和服务的动态切换,确保应用在各阶段都能高效运行和调试。 ... [详细]
  • Vue CLI 初始化 Webpack 项目时,main.js 文件是如何被调用的? ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 在 Vue.js 中实现网络请求的方法与最佳实践包括使用 `vue-resource` 插件。首先,通过命令 `npm install vue-resource --save` 安装该插件,确保添加 `--save` 参数以将依赖项记录到 `package.json` 文件中。此外,推荐使用 `axios` 作为替代方案,因为它提供了更强大的功能和更好的性能。在项目中引入并配置 `axios`,可以实现更高效、灵活的网络请求管理。 ... [详细]
  • 本文详细介绍了在 Vue.js 前端框架中集成 vue-i18n 插件以实现多语言支持的方法。通过具体的配置步骤和示例代码,帮助开发者快速掌握如何在项目中实现国际化功能,提升用户体验。同时,文章还探讨了常见的多语言切换问题及解决方案,为开发人员提供了实用的参考。 ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
  • Vue 开发技巧:实现数据过滤与排序功能详解
    Vue 开发技巧:实现数据过滤与排序功能详解 ... [详细]
  • 2.2 组件间父子通信机制详解
    2.2 组件间父子通信机制详解 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 基于 Vue 和 Element UI 实现的简洁登录界面设计
    本文介绍了一种利用 Vue.js 和 Element UI 框架构建的简洁登录界面设计。该设计不仅注重用户体验,还确保了界面的美观性和易用性。通过合理的布局和组件配置,实现了高效、响应式的登录功能,适用于多种前端应用场景。 ... [详细]
  • Vue应用预渲染技术详解与实践 ... [详细]
  • 深入解析:React与Webpack配置进阶指南(第二部分)
    在本篇进阶指南的第二部分中,我们将继续探讨 React 与 Webpack 的高级配置技巧。通过实际案例,我们将展示如何使用 React 和 Webpack 构建一个简单的 Todo 应用程序,具体包括 `TodoApp.js` 文件中的代码实现,如导入 React 和自定义组件 `TodoList`。此外,我们还将深入讲解 Webpack 配置文件的优化方法,以提升开发效率和应用性能。 ... [详细]
  • 在GitHub上克隆vue-element-admin项目时遇到依赖安装错误
    在 GitHub 上克隆 vue-element-admin 项目后,使用 `npm install` 安装依赖时遇到了未知的 Git 错误。具体错误信息为 `npm ERR! code 128`,提示命令执行失败。这可能是由于网络问题、Git 配置不正确或某些依赖包的仓库地址无效导致的。建议检查网络连接、更新 Git 版本并确保所有依赖项的 URL 正确无误。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
author-avatar
CoCo培培_409
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有