【问题标题】:How to run nodemon + ts-node + typescript altogether without having to install ts-node or npx globally?如何在无需全局安装 ts-node 或 npx 的情况下完全运行 nodemon + ts-node + typescript?
【发布时间】:2023-08-10 21:26:01
【问题描述】:

我的package.json 中有以下内容:

  "scripts": {
    "serve-fake-api": "nodemon fake-api/server.ts --watch 'fake-api/*.*'",
    "serve-vue": "vue-cli-service serve",
    "serve": "concurrently -k \"npm run serve-fake-api\" \"npm run serve-vue\"",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },

我想重写"serve-fake-api": "nodemon --exec 'ts-node' fake-api/server.ts --watch fake-api/*.*",,但不必全局安装ts-nodenpx

我怎样才能做到这一点?

【问题讨论】:

    标签: node.js typescript nodemon ts-node


    【解决方案1】:

    我最近遇到了ts-node-dev,它融合了ts-nodenode-dev

    无需配置。 CLI 参数是 ts-nodenode-dev 接受的组合,以及它自己的几个。

    像这样运行:

    "start": "tsnd fake-api/server.ts"
    

    【讨论】:

      【解决方案2】:

      您可以在本地安装 nodemonts-node 作为开发依赖项:

      npm install -D ts-node nodemon
      

      现在,当您运行 npm 脚本时,它们将使用您的 local version by default

      除了 shell 预先存在的 PATH 之外,npm run 还添加了 node_modules/.bin 到提供给脚本的 PATH。任何二进制文件 由本地安装的依赖项提供的可以不使用 node_modules/.bin 前缀

      【讨论】:

      • 它们已经作为开发依赖项安装,npm 似乎确实看到了“ts-node”=/
      • [0] [nodemon] starting 'ts-node' fake-api/server.ts => [0] ''ts-node'' is not recognized as an internal or external command,
      • 这是一种奇怪的行为。尝试将您的 serve-fake-api 脚本更新为 nodemon -x 'node -r ts-node/register' fake-api/server.ts --watch 'fake-api/*.*'
      • 感谢有一些奇怪的东西,实际上在 --exec 之后的任何东西都找不到,比如 node ts-node 。 [0] [nodemon] starting 'node -r ts-node/register' fake-api/server.ts`` => [0] ''node' is not recognized as an internal or external command, => [0] operable program or batch file.
      • 看起来类似于:github.com/remy/nodemon/issues/389
      【解决方案3】:

      我设法使用下面的packages.json 运行所有内容:

      {
        "name": "rm-combo",
        "version": "0.1.0",
        "private": true,
        "scripts": {
          "serve-fake-api": "nodemon fake-api/index.ts --watch fake-api/*.*",
          "serve-vue": "vue-cli-service serve",
          "serve": "concurrently -k \"npm run serve-fake-api\" \"npm run serve-vue\"",
          "build": "vue-cli-service build",
          "lint": "vue-cli-service lint"
        },
        "dependencies": {
          "@types/node": "^12.12.7",
          "axios": "~0.19.0",
          "devextreme": "19.2.3",
          "devextreme-vue": "19.2.3",
          "element-ui": "~2.8.2",
          "oidc-client": "~1.9.1",
          "vue": "^2.6.10",
          "vue-class-component": "^7.1.0",
          "vue-property-decorator": "^8.3.0",
          "vue-router": "^3.1.3",
          "vuetify": "^2.1.10",
          "vuex": "^3.1.2",
          "vuex-class": "^0.3.2"
        },
        "devDependencies": {
          "@types/express": "^4.17.2",
          "@types/json-server": "^0.14.2",
          "@vue/cli-plugin-typescript": "^4.0.5",
          "@vue/cli-service": "^4.0.5",
          "concurrently": "^5.0.0",
          "devextreme-cldr-data": "^1.0.2",
          "globalize": "^1.4.2",
          "json-server": "^0.15.1",
          "node-sass": "^4.13.0",
          "nodemon": "^1.19.4",
          "sass-loader": "^8.0.0",
          "ts-node": "^8.5.0",
          "typescript": "^3.7.2",
          "vue-template-compiler": "^2.6.10"
        }
      

      以及支持在此处执行该技巧的 ts 功能:https://*.com/a/59126595/4636721

      【讨论】:

        最近更新 更多