问题很简单。我用cordova 然后我每次添加插件,源码就被初始化成为最初的代码了。这是什么原因啊?我百度没找到。
cordova build 和 cordova install 都会导致代码初始化。
你好,你说的初始化,大概是不是指(我们拿 android 来举例):
你是手动替换 android 的 assets 里的 www 目录。
接着你运行了 cordova build 命令,然后运行的效果,变成了 Hello cordova(类似 Hello world)
如果是这样,我们先来分析 cordova build 命令。
我们在命令行里面使用的 cordova 一般是指 cordova-cli
cordova-cli 是基于 nodejs 写的脚本。
cordova-cli 的目录结构如下。
我们进入cli.js 文件。
在这里,我们可以看到这样的代码
...
if (cmd == 'emulate' || cmd == 'build' || cmd == 'prepare' || cmd == 'compile' || cmd == 'run') {
// All options without dashes are assumed to be platform names
...
cordova.raw[cmd].call(null, opts).done();
}
上面的意思就是,假如我们使用cordova build命令,那么,他就会调用 build 方法。cordova-lib 的目录如下。下图所示的只是一部分常用的命令。
在 build.js 里面,我们可以看到这样的代码。
...
return hooksRunner.fire('before_build', options)
.then(function() {
return require('./cordova').raw.prepare(options);
}).then(function() {
return require('./cordova').raw.compile(options);
}).then(function() {
return hooksRunner.fire('after_build', options);
});
也就是说,当执行 build 命令的时候,会先执行 prepare 命令。
接着我们来到 prepare.js 文件。在文件里,我们不难发现有如下代码
exports = module.exports = prepare;
function prepare(options) {
...
}
接下来,cordova 被初始化的重点就在这里了。
首先更新我们的 config.xml 文件。
...
if(fs.existsSync(parser.config_xml())){
shell.cp('-f', parser.config_xml(), defaults_xml_path);
}else{
shell.cp('-f', xml, parser.config_xml());
}
...
接着更新和替换我们的 assets/www 目录
...
// Replace the existing web assets with the app master
parser.update_www();
...
在我们的 www 目录生成 plugins文件夹 和 cordova.js以及cordova_plugin.js文件。
...
// Call plugman --prepare for this platform. sets up js-modules appropriately.
var plugins_dir = path.join(projectRoot, 'plugins');
events.emit('verbose', 'Calling plugman.prepare for platform "' + platform + '"');
if (options.browserify) {
plugman.prepare = require('../plugman/prepare-browserify');
}
plugman.prepare(platformPath, platform, plugins_dir, null, true, pluginInfoProvider);
// Make sure that config changes for each existing plugin is in place
var platformJson = PlatformJson.load(plugins_dir, platform);
var munger = new PlatformMunger(platform, platformPath, plugins_dir, platformJson, pluginInfoProvider);
munger.reapply_global_munge();
munger.save_all();
...
最后其实 cordova help 里面已经告诉了这一些列的运行步骤。
这就是这一切造成,当我们运行这些命令的时候,会被初始化的原因。
解决方案,就是将自己的 网页替换到和platforms,plugins 文件夹同级的 www 目录中。
执行这一些命令的时候,就不会被替换成 cordova 的初始化版本了。
以上的这一切解释都是我认为楼主遇到的问题。如果是其他问题,请具体描述一下。