之前一直是在vs 2013中使用Cordova来开发移动app(目前有iPad版/iPhone版/安卓版),准备到下一个milestone的时候升级到2015,这两天在尝试各种东西。

2015中的cordova项目和2013结构变化很大,所以需要一个手动迁移过程,这个过程之前已经有同事尝试过了,包括很多插件可能都要重新安装,不同插件的使用可能还有些不太一样。

这两天在研究如何在项目里使用gulp这个前端集成工具,vs 2015支持这个东西是一个非常大的利好,之前很多事情现在都可以自动来做了。

gulp需要通过npm进行安装,不过2015自带的是npm 2.7.4,这个版本的npm有一个非常头疼的问题:在安装包依赖的时候会一层一层下去,gulp又是一个依赖层级非常多的包,直接导致路径长度超过了windows系统的限制,虽然实际用的时候问题不大,但是从资源管理器里删除和移动就会非常麻烦(不过vs自己在卸载包的时候就没问题)。下面这张图是别人在GitHub的一个issue上截的:

微博上有人提醒我npm 3已经解决了这个问题,可以把所有的依赖包摊平,以下是安装方法:

  1. 微软提供了一个windows系统上升级npm的工具(因为会涉及到修改系统环境中的PATH等一系列问题),这个工具也是用npm安装的
  2. 以管理员身份打开PowerShell
  3. 执行:Set-ExecutionPolicy Unrestricted -Scope CurrentUser –Force
  4. 安装:npm install -g npm-windows-upgrade
  5. 执行:npm-windows-upgrade
  6. 然后会给出一个npm的版本列表供我们选择,最新的好像是3.5.0,但是我去npmjs上看好像是3.4.1?所以最后还是选了3.4.1
  7. 装完之后用npm -v确认一下版本

然后……发现在vs里面重新下载npm依赖的时候依然是嵌套的……不解……

不过用命令行的方式下载就好了……

然后发现了一个新问题,gulpfile.js 执行不能:

我用了gulp-sass来预处理css,它依赖于node-sass,node-sass使用了一个用C编写的libsass库,提示没找到指定的库文件。我看了一下node-sass的源代码,可能是因为build的时候和使用的时候生成路径不一致导致的(我这里是在win32-ia32-14目录,貌似是用C14编译器编译的),折腾一会儿无果之后,从GitHub上手动下载了win32-ia32-11版本……放进去就ok了

 

gulp的使用比较简单,安装刚才说过了(其实就是Cordova项目根目录的package.json),然后根据需要选择一些插件,我们会用到的包括gulp-uglify(js最小化)、gulp-sass(预处理css)、gulp-concat(合并文件)。使用的时候在根目录创建一个gulpfile.js,然后就是标准玩儿法,相对比较简单,这里就不多介绍了,有兴趣可以参考gulp文档

在Visual Studio的视图菜单 – 其他窗口 – 任务运行程序资源管理器 中,可以看到gulp中的任务:

左侧可以看到在gulpfile.js中编写的所有任务,可以右键直接运行,或者右键把它绑定到vs的事件中,比如生成前进行html、js、css处理,在项目打开的时候进行watch(文件修改后可以自动进行css预处理等任务)。

 

我们的产品是一个单页面应用(SPA),里面目前涉及到超过70个页面,没有用angular这样的框架(不过在某些核心功能中使用了knockout),是我自己写的一套简单的(有机会可以分享一下),每个页面对应一个html、一个js,之前css都是写在一起的(现在已经1800多行了……)。2015的Cordova项目所有引用的文件都在www目录中,所以后面打算这么干:

  1. 在www目录之外创建一个component_pages目录,每个页面对应一个html + 一个js + 一个scss(可能没有)放到这里面
  2. 使用gulp实现如下功能:
    1. 所有非库的js文件(也就是自己写的js文件),进行uglify(如果是debug模式可以跳过这一步),然后复制到www目录对应文件夹下
    2. 所有的html文件直接复制到www目录对应文件夹下
    3. 所有的scss预编译为css后合并成一个css,复制到www目录对应文件夹下……

 

参考:

  1. Automate tasks for your Cordova project by using Gulp
  2. npm-windows-upgrade

在Visual Studio 2015的Cordova项目中使用Gulp的更多相关文章

  1. Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)

    Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)    转 https://blog.csdn.net/lhl1124281072/article/details/800 ...

  2. visual studio 2015 rc &cordova -hello world

    初始环境,用来看看书,电影,上上网的win8,所以一切从头开始. 1,首先还是装visual studio 2015  rc吧,目前只放出在线安装,所以要很长很长时间.不过有新闻说很快要实现中国网友至 ...

  3. Visual Studio 2015 新建MVC项目 Package Manager Console不能使用 (HRESULT: 0x80131500)

    Visual studio 2015 突然新建不了MVC项目,报出错误: HRESULT: 0x80131500 在折腾了很长时间,最后在Github上看到这样一个贴 地址:https://githu ...

  4. Visual studio 2015 Community 安装过程中遇到问题的终极解决

    早就有给自己电脑升级VS的想法,可是安装过程并不顺利,一直拖到现在,昨天下定决心,把遇到的问题一个个解决,终于安装成功了,将安装过程中遇到的问题和解决方法记录一下. 需要说明一下的是,不同的电脑环境可 ...

  5. 在 Visual Studio 2017 新建的项目中,无法设置项目版本号的通配符规则

    错误信息:CS8357 指定的版本字符串中包含与确定性不兼容的通配符.从版本字符串删除通配符,或者禁用此编译的确定性 解决方法:删除项目文件中的配置,或将其设为 False :<Determin ...

  6. Visual Studio 2015 和 Apache Cordova 跨平台开发入门(一)

    基于 Windows 10 的 Visual Studio 2015 跨平台的应用开发主要分为基于Visual Studio 安装 Xamarin 扩展的跨Android.iOS 和 Windows的 ...

  7. [.net程序员必看]微软新动向之Android和IOS应用 visual studio 2015 Cordova[原创]

    自萨蒂亚·纳德拉(Satya Nadella)上任微软CEO以来,可谓是惊喜不断,仿佛让世界尤其是我们.net程序员心中又燃起了希望.先是免费提供 iOS 版和安卓版 Office:然后在 xbox ...

  8. 微软新动向之Android和IOS应用 visual studio 2015 Cordova[原创]

    自萨蒂亚·纳德拉(Satya Nadella)上任微软CEO以来,可谓是惊喜不断,仿佛让世界尤其是我们.net程序员心中又燃起了希望.先是免费提供 iOS 版和安卓版 Office:然后在 xbox ...

  9. Visual Studio 2015 和 Apache Cordova 跨平台开发入门

    原文:Visual Studio 2015 和 Apache Cordova 跨平台开发入门(一) 基于 Windows 10 的 Visual Studio 2015 跨平台的应用开发主要分为基于V ...

随机推荐

  1. 【Python3 爬虫】06_robots.txt查看网站爬取限制情况

    大多数网站都会定义robots.txt文件来限制爬虫爬去信息,我们在爬去网站之前可以使用robots.txt来查看的相关限制信息 例如: 我们以[CSDN博客]的限制信息为例子 在浏览器输入:http ...

  2. (转)JavaScript: in, hasOwnProperty, delete, for/in

    in 运算符 判断对象是否拥有某一属性只要对象拥有该属性,就会返回true,否则false var point = { x:1, y:1 };alert( 'x' in point );  //tru ...

  3. Hive substr 函数截取字符串

    开发中,经常进行模糊查询或者进行截取字符串进行模糊匹配,常用的就是substr函数或者substring函数. 使用语法: substr(string A, int start),substring( ...

  4. PyCharm 环境配置

    1.去掉“自动保存功能” pycharm默认是自动保存的,习惯自己按 ctrl + s 的可以进行如下设置: 菜单File -> Settings... -> Appearance &am ...

  5. 关于http和rpc的区别(segmentfault上的回答)

    问题最近用了谷歌的grpc,所以对rpc和http有一点疑惑,感觉这两个东西功能上是一样的,rpc某个服务监听某一个方法,客户端调用这个方法,返回相应的数据,和http监听某个方法的路由 返回相应的数 ...

  6. FMDB(一)— 简单介绍

    在iOS开发过程中常常会用到数据库方面的操作,但是iOS原生的SQLite API使用起来并不十分友好,对于C语言基础较薄弱的朋友来说.使用起来可能会认为比較不便.于是,一些第三方的对SQLite A ...

  7. Codeforces Round #240 (Div. 1)B---Mashmokh and ACM(水dp)

    Mashmokh's boss, Bimokh, didn't like Mashmokh. So he fired him. Mashmokh decided to go to university ...

  8. 推送本地文件夹到github

    1.首先鼠标右键,Git Init Here将文件夹初始化为仓库 2.打开github桌面版 3.点击添加本地仓库 4.填好summary和description并提交 5.push到自己的githu ...

  9. html之常用元素

    基础: <!DOCTYPE> 定义文档的类型 语法: html5 <!DOCTYPE html> <html> 定义html文档,这个就不多说了! <titl ...

  10. Jetty锁定文件的问题

    在windows系统上,jetty默认在运行时会锁定部署的文件.这对于需要在程序运行期间动态生成或改动某些文件就变得不能执行!对于这一点,Jetty的官网上专门有文章进行了解释:http://docs ...