簡體   English   中英

package.json是否支持復合變量?

[英]Does package.json support compound variables?

一個尊重構建工件的 semver 目錄結構的項目即將開始,package.json 或 .nmprc 似乎是定義此元數據的正確位置。 這是一些初步代碼,演示了如何實現目標:

{
  "name": "com.vendor.product"
, "version": "0.0.0"
, "directories": {
    "build": "./out"
  }
, "main": "./${npm_directories_build}/${npm_package_name}/${npm_package_version}/${npm_package_name}.js"
, "exports": "${npm_package_main}"
, "scripts": {
    "echo": "echo\"${npm_package_exports}\""
  }
}

我期望

npm run echo

將復合變量結果打印到標准 output,

./out/com.vendor.product/0.0.0/com.vendor.product.js

但相反,它打印文字

${npm_package_export}

我試圖在 .npmrc 中使用數組變量

outpath[]=./out
outpath[]=/${npm_package_name}
outpath[]=/${npm_package_version}

...
{
  "echo": "echo \"${npm_config_outpath}\""
}

簡單地打印一個空的換行符


原本預計package.json支持復合變量,但現在這個假設有問題。 我已經檢查了文檔,但要么我遺漏了某些東西,要么沒有定義。 避免長時間重復相同的數據(例如多次引用 package 變量以形成單一路徑)。 它旨在 package 名稱和版本始終以可靠且可預測的方式指示構建文件的位置。 如果不支持復合變量,您能否闡明 .npmrc 數組變量的實際工作原理? 如果做不到這一點,您能否推薦一種替代方法來達到相同的目的? 非常感謝!

搜索文檔:

簡短回答:

“package.json支持復合變量嗎?”

不幸的是不,不是因為你想要使用它們的方式。 它只有package json 變量,只能在npm 腳本中使用。 例如在 *Nix 上將echo顯腳本定義為:

"echo": "echo $npm_package_version"

或在 Windows 上將其定義為:

"echo": "echo %npm_package_version%"

將打印版本,例如0.0.0

注意: cross-env為跨平台工作的單一語法提供了解決方案。

除了scripts部分,您當然不能在package.json字段的其他地方包含 參數替換${...}


附加信息:

關於您隨后的評論:

.npmrc 中定義的數組值如何在.npmrc中使用

AFAIK 我不認為你可以。 例如,假設我們;

  1. 將這個人為的.npmrc保存在項目目錄的根目錄中。

    .npmrc

     quux[]="one" quux[]="two" quux[]="three" foo=foobar
  2. 然后cd到項目目錄,運行如下命令打印所有環境變量:

     npm run env

    如您所見,npm 添加了npm_config_foo=foobar環境變量。但是對於quux數組,沒有npm_config_quux=[... ]環境變量。

    因此,在使用package.json 變量的 npm 腳本中,以下內容有效:

     "echo": "echo $npm_config_foo"

    然而,下面的(用於引用數組)並不——僅僅因為它不存在;

     "echo": "echo $npm_config_quux"

ini node.js package:

也許考慮調查 npm 用於解析.npmrc文件的ini node.js package。 例如:

  1. 如果運行以下命令在項目中安裝 package:

     npm i -D ini
  2. 然后按照以下定義 npm echo顯腳本:

     "scripts": { "echo": "node -e \"var fs = require('fs'), ini = require('ini'); var config = ini.parse(fs.readFileSync('./.npmrc', 'utf-8')); console.log(config.quux)\"" }

    請注意,它使用 nodejs 命令行選項-e來評估 JavaScript 代碼。 它主要執行以下操作:

     var fs = require('fs'), ini = require('ini'); var config = ini.parse(fs.readFileSync('./.npmrc', 'utf-8')); console.log(config.quux);
  3. 然后給出我之前在運行時提到的人為設計的.npmrc文件:

     npm run echo

    它會打印:

    [ 'one', 'two', 'three' ]

暫無
暫無

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

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