Npm工作区-从根包调用工作区脚本

我正在使用自定义开发脚本处理根 git 存储库中的多个 npm 包来处理启动、编译、构建等。现在我遇到了 npm 工作区,并想在我的以下项目结构中使用这个惊人的新功能,但我无法让它工作:

projectx (root)
- package.json
- apps   
 -- backend
   -- src
   -- package.json (name: @projectx/backend, scripts: "dev":"ts-node or whatever")
 -- common
   -- src
   -- package.json (name: @projectx/common)
 -- frontend
   -- src
   -- package.json (name: @projectx/frontend, scripts: "dev":"webpack")

我的根 package.json 包含:

    {
  "name": "packagex",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "private": "true",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1",
    "back:dev": "npm workspace @projectx/backend dev",
    "front:dev": "npm workspace @projectx/frontend dev",
    "dev": "run-p back:dev front:dev"
  },
  "workspaces": [
    "apps/*"
  ],
  "repository": {
    "type": "git",
    "url": "git_url"
  },
  "author": "me",
  "license": "ISC",
  "devDependencies": {
    "npm-run-all": "^4.1.5"
  }
}

现在我想用 npm-run-all 和 root 上的命令启动后端和前端: npm run dev 这导致:

而且我还想与后端和前端共享通用包,在这种情况下应该是可能的。也许其他人也面临同样的问题,或者对我在这里做错了什么有一些想法。

回答

"workspaces"在 package.json 中的属性看起来不错。我正在使用 NPM 工作区,它运行良好,但它仍然缺少很多功能,因此您需要自己进行连接。我也不认为npm worksace是一个命令(但也许是为了未来?),所以这里有一个让它工作的清单:

  • 确保您使用的是 Node 15+ 和 NPM 7+
  • 将所有 package.json 设置为 "private": true,
  • 删除package-lock.json项目中的所有内容,转到根目录,然后npm install. 它应该生成一个根级别package-lock.json,其中包含您工作区的所有依赖项
  • 由于您正在使用npm-run-all,请将其添加到您的脚本中:
  "scripts": {
    "back:dev": "cd apps/backend && npm run dev",
    "front:dev": "cd apps/fontend && npm run dev",
    "dev": "npm-run-all build --parallel back:dev front:dev"
  }

然后以npm run dev.

请注意,您可能需要考虑使用start脚本而不是dev缩短您需要键入的命令(例如,npm start而不是npm run dev),但npm run dev仍然可以。


以上是Npm工作区-从根包调用工作区脚本的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>