【发布时间】:2020-12-09 02:23:56
【问题描述】:
一个尊重构建工件的 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
将复合变量结果打印到标准输出,
./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 支持复合变量,但这个假设现在受到质疑。我检查了文档,但要么我遗漏了某些东西,要么没有定义。应避免长时间重复相同的数据(例如,多次引用包变量以创建单个路径)。它旨在让包名称和版本始终以可靠和可预测的方式指示构建文件的位置。 如果不支持复合变量,您能否阐明 .npmrc 数组变量的实际工作方式?如果做不到这一点,你能推荐一种替代方法来达到同样的目的吗?非常感谢!
搜索的文档:
【问题讨论】:
-
感谢@RobC 的回答。清晰是一种解脱。也感谢外部链接,非常有帮助!问太多不是很好,但你是否也知道.npmrc中定义的array values在package.json中是如何使用的?如果没有,没问题,我只是好奇这是否会提供替代解决方案。非常感谢!
-
@RobC 感谢您的回馈!对于上下文,问题与设计项目模板有关。复合变量将是完美的,因为它会导致在一个地方定义重要的元数据,只是为了保持文档的完整性。您发布的替代方案也很有趣,我们将对其进行探索。可能会调查构建钩子和外部脚本以读取包元数据并将计算路径注入回包中。请随时整理您的 cmets 并将它们作为正式答案发布,并且很高兴将此问题标记为已回答。 Namaste RobC.谢谢。
标签: npm package.json .npmrc