Node.js 从javascript钩子中获取cordova包名称

Node.js 从javascript钩子中获取cordova包名称,node.js,cordova,hook,cordova-plugins,Node.js,Cordova,Hook,Cordova Plugins,我正在编写一个cordova插件,它带有一个节点挂钩,可以在您准备好后运行 这只适用于Android 在这个钩子中,我需要获取cordova包的名称,这样我就可以将一个文件复制到src/com/example/myproject文件夹(如果包是com.example.myproject) 如果我知道包名,我可以创建此路径。我有它的工作硬编码现在,但我需要这个工作与两个不同的包名 有没有办法从插件钩子中的代码中获取包名 module.exports = function(ctx){ var

我正在编写一个cordova插件,它带有一个节点挂钩,可以在您准备好后运行

这只适用于Android

在这个钩子中,我需要获取cordova包的名称,这样我就可以将一个文件复制到src/com/example/myproject文件夹(如果包是com.example.myproject)

如果我知道包名,我可以创建此路径。我有它的工作硬编码现在,但我需要这个工作与两个不同的包名

有没有办法从插件钩子中的代码中获取包名

module.exports = function(ctx){
   var fs = ctx.requireCordovaModule('fs');
   var path = ctx.requireCordovaModule('path');
   var deferral = ctx.requireCordovaModule('q').defer();

   //get package name here

   //do other stuff
}
我做了很多研究,但没有找到这个


谢谢。

看起来它在上下文对象之外不可用,但您可以尝试解析config.xml

module.exports = function(context) {
    var fs = require('fs');
    var path = require('path');
    var config_xml = path.join(context.opts.projectRoot, 'config.xml');
    var et = context.requireCordovaModule('elementtree');

    var data = fs.readFileSync(config_xml).toString();
    var etree = et.parse(data);

    console.log(etree.getroot().attrib.id);
};

该插件使用了类似的策略来读取配置属性。

这里是我根据2021年的不同答案编译的结果。 我用它来更新Xcode项目中的一些参数,以进行插件编译

您可以看到,我从config.xml获取了应用程序id和名称

您可以将其添加到after_prepare hook:

#!/usr/bin/env node

let fs    = require('fs');
let xcode = require('xcode');
let path = require('path');
let et = require('elementtree');


module.exports = function (context) {
    //console.log(context);

    function addBuildPropertyToDebugAndRelease(prop, value) {
        console.log('Xcode Adding   ' + prop + '=' + value);
        myProj.addBuildProperty(prop, value, 'Debug');
        myProj.addBuildProperty(prop, value, 'Release');
    }

    function updateBuildPropertyToDebugAndRelease(prop, value) {
        console.log('Xcode Updating ' + prop + '=' + value );
        myProj.updateBuildProperty(prop, value, 'Debug');
        myProj.updateBuildProperty(prop, value, 'Release');
    }


    // Getting app id and name from config.xml
    let config_xml = path.join(context.opts.projectRoot, 'config.xml');
    let data = fs.readFileSync(config_xml).toString();
    let etree = et.parse(data);
    let appId = etree.getroot().attrib.id ;
    let appName = etree.getroot().find('name')['text'];

    // Building project path
    let projectPath = 'platforms/ios/' + appName + '.xcodeproj/project.pbxproj';

    // Opening Xcode project and parsing it
    myProj = xcode.project(projectPath);
    myProj = myProj.parseSync();

    // Common properties
    addBuildPropertyToDebugAndRelease('DEVELOPMENT_TEAM', 'CGXXXXXXX');
    addBuildPropertyToDebugAndRelease('CODE_SIGN_IDENTITY', '"Apple Development"');

    // Compilation properties
    addBuildPropertyToDebugAndRelease('ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES', 'YES');

    // Save project file
    fs.writeFileSync(projectPath, myProj.writeSync());

};