使全局npm脚本可用于多个子项目

使全局npm脚本可用于多个子项目,npm,npm-scripts,.npmrc,Npm,Npm Scripts,.npmrc,我们有一个包含许多子项目的monorepo root/ complex/dir/layout/subproj1 complex/dir/layout/subprojB other/dir/subproj2 我希望在全球范围内提供某些脚本,这些脚本可用于所有不同的子项目。一个例子是我们用来部署AWS lambda的脚本,比如 "scripts": { "1up:slsdeploy": "npx serverless deploy --aws-profile pro

我们有一个包含许多子项目的monorepo

root/
   complex/dir/layout/subproj1
   complex/dir/layout/subprojB 
   other/dir/subproj2
我希望在全球范围内提供某些脚本,这些脚本可用于所有不同的子项目。一个例子是我们用来部署AWS lambda的脚本,比如

  "scripts": {
    "1up:slsdeploy": "npx serverless deploy --aws-profile prod --region 'us-west-2' --description $((git branch --show-current; git rev-parse --short HEAD; id -un) | tr '\\n' ' ')"
  },
在我们40种不同的Lambda中复制和维护这一点并不是干的。明确回答无服务器问题并不是主要目标,但这是当务之急。但我更喜欢使用更通用的技术,使全局脚本可用于子项目

最明显的答案是——仅仅把它放在root package.json中似乎不起作用(就像依赖项那样)

我还遇到了一个关于环境变量npm的有趣的事情,即可以引用
.npmrc
中的设置,比如$npm\u config\u,所以我想我可以在顶级
中放置一些东西。npmrc
,比如

MY_SPECIAL_CMD = "do something really special"
然后在我的个人package.json中引用它

  "scripts": {
    "1up:slsdeploy": "$npm_config_MY_SPECIAL_CMD"
  },
这会更好,甚至更正确,因为每个预定义脚本可能不适合每个子项目。但显然,这只适用于为
.npmrc
定义的配置设置(而且npm会自动忽略它无法识别的设置,这看起来像是一个bug)。所以这不起作用