vscode下ts-node传入cli参数

ts-node写ts,启动时习惯在package.json里写

  "scripts": {
    "build-ts": "tsc",
    "start": "ts-node src/server.ts",
    "start:dev": "nodemon",
    "serve": "node dist/server.js",
    "test": "mocha --require ts-node/register test/**/*.ts",
    "build_browser_dev": "browserify ./src/page.js -o ./static/bundle.js -t [ babelify --presets[env]]"
  },

但是当希望启动时传入命令行参数时,ts-node没法接受命令行参数

https://www.npmjs.com/package/ts-node

Programmatic

You can require ts-node and register the loader for future requires by using require('ts-node').register({ /* options */ }). You can also use file shortcuts - node -r ts-node/register or node -r ts-node/register/transpile-only - depending on your preferences.

Note: If you need to use advanced node.js CLI arguments (e.g. --inspect), use them with node -r ts-node/register instead of the ts-node CLI.

然后给出段不明配置文件

Visual Studio Code

Create a new node.js configuration, add -r ts-node/register to node args and move the program to the args list (so VS Code doesn't look for outFiles).

{
    "type""node",
    "request""launch",
    "name""Launch Program",
    "runtimeArgs"[
        "-r",
        "ts-node/register"
    ],
    "args"[
        "${workspaceFolder}/index.ts"
    ]
}

不知该放那里,说得不清楚。

参考这个vscode 调试node之npm与nodemon,原来是vscode的launch.json, 自己汇总之后这样

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "启动程序",
            //"program": "${workspaceFolder}\src\server.ts",
            //"preLaunchTask": "tsc: build - tsconfig.json",
            "outFiles": [
                "${workspaceFolder}/dist/**/*.js"
            ],
            "runtimeArgs": [
                "-r",
                "ts-node/register",
            ],
            "args": [
                "${workspaceFolder}\src\server.ts",
                "--config=D:\src\overlay.yml"
            ]
        }
    ]
}

这个是按F5启动调试时用的。

如果还是想npm start 用参数呢?

这样:

  "scripts": {
    "build-ts": "tsc",
    "start": "node -r ts-node/register src/server.ts",
    "start:dev": "nodemon",
    "serve": "node dist/server.js",
    "test": "mocha --require ts-node/register test/**/*.ts",
    "build_browser_dev": "browserify ./src/page.js -o ./static/bundle.js -t [ babelify --presets[env]]"
  },

用node -r ts-node/register代替 ts-code

然后 nodemon的配置文件nodemon.json里这样:

{
    "ignore": ["**/*.test.js", ".git", "node_modules"],
    "watch": ["src"],
    "exec": "npm start -- --server=localhost",
    "ext": "ts js"
}

--加空格之后 是参数部分。这样ctrl+shift+B启动,start:dev

在src/server.ts里

//命令行参数
console.log('process.argv', process.argv);

可以收到

请无视现在改回windows下写码。。。主要是sublime text 3 的 ctrl+B运行脚本方便+中文显示,然后经常要写其他的方案各种杂事,各种办公软件win比较方便。

活在vscode chrome npm pipenv的世界里,操作系统之间区别不大。

将来部署时,在docker里启动直接用 npm start -- --server=XXX, --config=YYY 即可。

node的工程下各种.json的配置文件已经不少了。有点雪花式配置的意思。因为不同的组件每个都有一个配置文件,也算合理。

而且用文件配置总比用gui手工点击填写方便多了。

果然到了后端,就充满了cli,配置文件。用这样的思想组织的npm来管理前端,想想也挺有意思的。

不管了,现在配置文件写进去了,能用就行。

原文地址:https://www.cnblogs.com/xuanmanstein/p/9946629.html