我有一个after_prepare
挂钩,用我应用程序的主要javascript文件中的环境设置替换了一些占位符。它在Cordova 5.3.3及更低版本中运行良好,但从Cordova 5.4.0开始,对文件的更改在进入我的应用程序时就会撤消。当我重新读取钩子中的文件时,它看起来成功写入,但是当我在应用程序运行后打开文件时它已经恢复。
该文件为platforms/ios/www/static/angular/js/my-angular-stuff.js
。
我使用的是hooks/after_prepare/
文件夹,但由于它已被弃用,我尝试使用config.xml
设置。我也开始使用Cordova推荐的module.exports = function(context) {
风格;这些似乎都没有任何区别。同样,脚本似乎运行得很好,并确认更改已正确写入。但是之后的事情就会消除这些变化。
我很高兴使用不是after_prepare
的钩子,如果有更合适的话。 TBH我没有牢牢掌握各种Cordova执行阶段(构建vs编译vs准备vs运行)。
答案 0 :(得分:1)
我记得当我切换到cordova 6时,我必须在钩子中重构很多东西,但我不记得到底是什么......
如果它有帮助,这里'我拥有的仍然适用于6.1:
这是一个特定于android的钩子,所以它在config.xml的android平台部分:
<platform name="android">
<preference name="AndroidLaunchMode" value="singleTop" />
<preference name="android-minSdkVersion" value="14" />
<preference name="KeepRunning" value="true"/>
<icon src="res/android/xhdpi.png" />
<icon density="ldpi" src="res/android/ldpi.png" />
<icon density="mdpi" src="res/android/mdpi.png" />
<icon density="hdpi" src="res/android/hdpi.png" />
<icon density="xhdpi" src="res/android/xhdpi.png" />
<hook type="after_prepare" src="scripts/android/myhookname.js" />
<hook type="after_platform_add" src="scripts/android/anotherhook.js" />
...
</platform>
...
,myhookname.js看起来像这样:
#!/usr/bin/env node
module.exports = function(ctx) {
var fs = ctx.requireCordovaModule('fs'),
path = ctx.requireCordovaModule('path'),
xml = ctx.requireCordovaModule('cordova-common').xmlHelpers;
var manifestPath = path.join(ctx.opts.projectRoot, 'platforms/android/AndroidManifest.xml');
var doc = xml.parseElementtreeSync(manifestPath);
if (doc.getroot().tag !== 'manifest') {
throw new Error(manifestPath + ' has incorrect root node name (expected "manifest")');
}
//change the theme in Android manifest file
doc.getroot().find('./application/activity[@android:name="MainActivity"]').attrib['android:theme'] = '@android:style/Theme.DeviceDefault.Light';
//save the file
fs.writeFileSync(manifestPath, doc.write({indent: 4}), 'utf-8');
console.log('\nEnd of post-prepare hook');
}
但我没有ios钩子,也许你的问题是特定于平台或者是cordova ios中的一个bug,你试过升级到最新版的cordova ios吗?
我也使用钩子来修改原生文件,而不是www中的文件,所以如果我在www中修补文件,也许我会遇到同样的问题。
要修补www中的js文件,我使用 merges 文件夹,我在每个平台上放置特定的js文件。
答案 1 :(得分:0)
我试图修改我的iOS项目文件,并且在after_prepare他无法正常工作时遇到类似的问题。我最终选择了after_plugin_install。对于我的情况,效果不是很好,但是是可行的解决方案。