2016-06-21 79 views
1

如果我们只更改了cordova项目的www/文件夹中的资产,并且没有更改任何本机代码/插件,则不应该有可能只是替换脚本新的www/文件夹与ios生成输出中的现有文件夹?Cordova将www文件夹复制到现有版本

这样我们就不需要每次使用cordova build ios来重新构建整个ios项目,每次我们想在模拟器中进行一些小改动并重新运行。这将为我们每天节省大量时间。

这样的事情是否已经存在?

回答

1

你有三种方式归档此:

  1. 让每一个文件或文件夹从根WWW的文件夹到你的平台www的文件夹的绝对符号链接。但不要符号链接整个www文件夹,也不要符号链接cordova.js文件。

  2. 在Xcode - > Build Phases中,您可以将copy-shell-scripts复制到www文件夹的每个文件或文件夹的www目录中。它应该如下所示: cp -R /absolute/path/to/your/app/www/index.html /absolute/path/to/your/app/platforms/ios/www/index.html

  3. 你可以使用钩子。把下面的钩子放在hooks-> after_platform_add-> create_symlinks.js和hooks-> after_build-> create_symlinks.js中。每次添加Android或ios平台或构建应用程序时,钩子都会运行。

你必须让脚本可执行,也许你需要从npm安装shelljs。

这里是我的钩,其修改为您的需求:

#!/usr/bin/env node 

var what_to_symlink_from_www = [ 
    "assets", 
    "index.html" 
]; 

// no need to change below 

var path = require("path"), 
    fs = require("fs"), 
    shell = require("shelljs"), 
    rootdir = process.argv[2], 
    added_platform = process.env.CORDOVA_PLATFORMS, 
    www = rootdir + "/www/", 
    android_www = rootdir + "/platforms/android/assets/www/", 
    ios_www = rootdir + "/platforms/ios/www/", 
    buildnumber_file = rootdir + "/buildnumber", 
    buildnumber, 
    active_platform_www; 

shell.echo("\r\nHook start: Symlinking"); 

if (added_platform === "ios") { 
    active_platform_www = ios_www; 
    do_job() 
} 
else if (added_platform === "android") { 
    active_platform_www = android_www; 
    do_job() 
} 

function do_job() { 
    what_to_symlink_from_www.forEach(function (item) { 
     shell.rm("-rf", active_platform_www + item); 
     shell.ln("-s", www + item, active_platform_www + item); 
     shell.echo("symlinked: " + item + " to " + active_platform_www); 
    }); 
    shell.echo("Hook end: Symlinking" + "\r\n"); 
} 
相关问题