我正在尝试用TypeScript和Angular应用程序运行一个开发服务器,而不是每次都转译ts文件。

我发现我可以用ts-node运行.ts文件,但我也想观看.ts文件并重新加载我的应用程序/服务器。这方面的一个例子是命令gulp watch。


当前回答

nodemon和ts-node:

nodemon --watch source --ext ts,json --exec "node --loader ts-node/esm ./source/index.ts"

其他回答

这对我来说很管用:

nodemon src/index.ts

显然,由于这个拉请求:https://github.com/remy/nodemon/pull/1552

第一步-在deDependencies中安装以下包

npm i -D @types/express @types/node nodemon ts-node tsc typescript

或者使用纱线

yarn add -D @types/express @types/node nodemon ts-node tsc typescript

第二步—在您的tsconfig中使用此配置。json文件

{
  "compilerOptions": {
    "target": "es6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', 'ES2021', or 'ESNEXT'. */,
    "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */,
    "lib": [
      "DOM",
      "ES2017"
    ] /* Specify library files to be included in the compilation. */,
    "sourceMap": true /* Generates corresponding '.map' file. */,
    "outDir": "./dist" /* Redirect output structure to the directory. */,
    "rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */,

    "strict": true /* Enable all strict type-checking options. */,
    "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */,
    "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */,
    "skipLibCheck": true /* Skip type checking of declaration files. */,
    "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
  },
  "exclude": ["node_modules"],
  "include": ["./src"]
}

第三步——在包中使用这些脚本。json文件

"scripts": {
    "start": "node ./dist/server.js",
    "dev": "nodemon -L ./src/server.ts && tsc -w"
},

你现在可以简单地用npm install——save-dev ts-node nodemon,然后用.ts文件运行nodemon,它就可以工作了:

nodemon app.ts

以前的版本:

我在开发环境中也遇到了同样的问题,直到我注意到没有一个demon的API允许我们为了执行自定义命令而改变它的默认行为。

例如,对于nodemon的最新版本:

nodemon --watch "src/**" --ext "ts,json" --ignore "src/**/*.spec.ts" --exec "ts-node src/index.ts"

或者创造一个无恶魔。Json文件,内容如下:

{
  "watch": ["src"],
  "ext": "ts,json",
  "ignore": ["src/**/*.spec.ts"],
  "exec": "ts-node ./src/index.ts"      // or "npx ts-node src/index.ts"
}

然后无参数地运行。

通过这样做,您将能够实时重新加载ts-node进程,而不必担心底层实现。


更古老的nodemon版本:

nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node' src/index.ts

或者更好:将nodemon的配置外部化为一个nodemon。json文件,包含以下内容,然后运行nodemon,正如Sandokan建议的那样:

{
  "watch": ["src/**/*.ts"],
  "ignore": ["src/**/*.spec.ts"],
  "exec": "ts-node ./index.ts"
}

只需更新这3个包

nodemon, ts-node, typescript
yarn global add nodemon ts-node typescript

or

npm install -g nodemon ts-node typescript

现在你可以运行这个,问题解决了

nodemon <filename>.ts

我已经抛弃了nodemon和ts-node,取而代之的是一个更好的选择,ts-node-dev https://github.com/whitecolor/ts-node-dev

只需运行ts-node-dev src/index.ts

(编辑) 自从我写了这个答案,nodemon已经改进了很多,现在所需的配置更轻了,性能也更好了。我目前使用这两种方法(显然是在不同的项目中),并且都很满意。