簡體   English   中英

cordova 平台添加:添加第二個平台會刪除現有插件和平台的節點模塊

[英]cordova platform add: adding second platform removes node modules for existing plugins and platforms

我基本上在做以下事情:

cordova plugin add pluginA 
cordova plugin add pluginC
cordova plugin add pluginX
cordova platform add android

這會在添加完成后安裝插件和 cordova-android@8.1.0,它們與 pluginA、pluginB 和 pluginC 一起存在於節點模塊中。 然后我做: -

cordova platform add ios@5

安裝 cordova-ios,但從 node_modules 中刪除 cordova-android 模塊和所有插件模塊。 不刪除平台,只刪除節點模塊。

打開 npm 計時,我可以看到它運行以下 npm 命令,並且 npm 命令刪除了 cordova-android 和插件

1 verbose cli [
1 verbose cli   '/usr/local/bin/node',
1 verbose cli   '/usr/local/bin/npm',
1 verbose cli   'install',
1 verbose cli   'cordova-ios@5',
1 verbose cli   '--production',
1 verbose cli   '--save-exact'
1 verbose cli ]

根據我切入骨干的真實項目,我已經設法通過基本項目設置重現了該問題:

mkdir issue && cd issue && {
  mkdir www
  echo '{}' > build.json
  cat >config.xml <<-EOF
    <?xml version='1.0' encoding='utf-8'?>
    <widget id="com.example.mobile.test" version="0.0.1" android-versionCode="1"
      xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"
      xmlns:android="http://schemas.android.com/apk/res/android">
    <name>Test Client</name>
    <description>Test Client</description>
    <author email="user@email.com" href="http://www.yourcompany.com">Your Company</author>
    <content src="index.html" />
    <engine name="ios" spec="5" />
  </widget>
  EOF

  cordova --verbose platform add --save android
  cordova --verbose platform add --save ios@5

  test ! -d node_modules/cordova-android \
    && echo "cordova-android has been removed"
}

~/.npm/_logs我可以看到執行了以下 npm 命令:

/usr/local/bin/node /usr/local/bin/npm view cordova-custom-config --json
/usr/local/bin/node /usr/local/bin/npm install cordova-custom-config --production --save
/usr/local/bin/node /usr/local/bin/npm install cordova-android@^8.0.0 --production --save-exact
/usr/local/bin/node /usr/local/bin/npm install cordova-ios@5 --production --save-exact

而從安裝cordova-ios@5的npm日志可以看出npm決定卸載cordova-android

97 silly diffTrees remove cordova-android@8.1.0
98 silly diffTrees remove cordova-custom-config@5.1.0

NPM 版本信息:

2 info using npm@6.14.8
3 info using node@v14.15.1

此外,作為參考,使用這些命令啟用 npm 日志記錄:

npm config set timing true
npm config set logs-max 10000

該行為由config.xml中的單個<engine/>節點觸發。 指定兩個引擎,或根本不指定引擎,添加第二個平台時不會刪除模塊。

  <engine name="ios" spec="5" />
  <engine name="android" spec="8" />

以下config.xml有效。

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.example.mobile.test" version="0.0.1" android-versionCode="1"
    xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"
    xmlns:android="http://schemas.android.com/apk/res/android">
  <name>Test Client</name>
  <description>Test Client</description>
  <author email="user@email.com" href="http://www.yourcompany.com">Your Company</author>
  <content src="index.html" />
</widget>

不知道為什么<engine/>節點會影響npm刪除那些模塊。

以下腳本有效,使插件和 cordova 平台保持不變。

mkdir issue && cd issue && {
  mkdir www
  echo "{}" >build.json

  cat >config.xml <<-EOF
    <?xml version='1.0' encoding='utf-8'?>
    <widget id="com.example.mobile.test" version="0.0.1" android-versionCode="1"
      xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"
      xmlns:android="http://schemas.android.com/apk/res/android">
      <name>Test Client</name>
      <description>Test Client</description>
      <author email="user@email.com" href="http://www.yourcompany.com">Your Company</author>
      <content src="index.html" />
    </widget>
  EOF

  cordova plugin add cordova-custom-config
  cordova platform add --save android
  cordova platform add --save ios@5
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM