[英]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 我不認為你可以。 例如,假設我們;
將這個人為的.npmrc保存在項目目錄的根目錄中。
.npmrc
quux[]="one" quux[]="two" quux[]="three" foo=foobar
然后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。 例如:
如果運行以下命令在項目中安裝 package:
npm i -D ini
然后按照以下定義 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);
然后給出我之前在運行時提到的人為設計的.npmrc
文件:
npm run echo
它會打印:
[ 'one', 'two', 'three' ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.