代码之家  ›  专栏  ›  技术社区  ›  Brett DeWoody

防止“纱线安装”在项目中运行(即强制“npm安装”)

  •  -1
  • Brett DeWoody  · 技术社区  · 7 年前

    最近,我们从纱线转向使用NPM,但旧习惯很难改掉,我担心一些开发人员会不小心使用NPM yarn install .

    我该如何预防 纱线安装 在项目中运行?或者,更好的是,显示要使用的提醒 npm install ?

    我在想 纱线安装 可以用 preinstall 脚本,但我不确定要在 预安装 剧本

    0 回复  |  直到 7 年前
        1
  •  7
  •   jonrsharpe    7 年前

    你可以通过观察纱线的价值来判断它是纱线还是NPM npm_execpath 环境变量。如果你做了这样的事情:

    "preinstall": "if [[ $npm_execpath =~ 'yarn' ]]; then echo 'Use NPM!' && exit 1; fi",
    

    然后 yarn install (或者只是 yarn )将在安装步骤之前失败。如果你想跨平台或者不使用*nix,那么你可以编写一个简单的脚本,比如:

    #! /usr/bin/env node
    
    if (process.env.npm_execpath.match(/yarn/)) {
      console.log("Use NPM!");
      process.exit(1);
    }
    

    把它放进去 preinstall .

        2
  •  8
  •   jonrsharpe    6 年前

    我想到了另一个选择,利用纱线将对照其版本进行检查的事实 $.engines.yarn 在里面 package.json .如果按如下方式设置:

    {
      ...
      "engines": {
        "yarn": "use npm!"
      }
    }
    

    虽然有一个稍微隐晦的错误信息,但纱线将退出:

    yarn install v{foo}
    info No lockfile found.
    [1/5] 🔍  Validating package.json...
    error {bar}@{baz}: The engine "yarn" is incompatible with this module. Expected version "use npm!". Got "{foo}"
    error Found incompatible module
    info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.