Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I get tslint to watch for changes in a specific folder?

I am using webpack 2, and it will tell me if there are compile issues with my typescript code. However, I have not figured out a way to run tslint through it and have it run with every change detected by webpack when its running in dev-server mode.

I have tried getting tslint-loader working, but for each file in my project it simply tells me:

/src/main.tsNo valid rules have been specified

I am using it as such:

rules: [
  {
    test: /\.ts$/,
    enforce: 'pre',
    loader: 'tslint-loader',
    options: {
      configuration: {
        configFile: true // I have also tried setting this to "tslint.json"
      }
    }
  },
  ... more loaders...

Still no joy.

It there a way to either:

  1. Have the tslint-loader I'm using inform me of lint errors in webpack-dev-server mode each time I make a change?
  2. Simply run tslint from the command line and have it continually "watch" the files in my project? I'm looking for something like tslint ./src/**/*.ts -t --force, but with an additional --watch flag that doesn't exist according to the tslint docs.

I would prefer not to use my editor (such as VS Code), as not everyone on my team uses it. I would prefer that the solution is contained either in the webpack config or the package.json scripts.

Thank you!

like image 913
tengen Avatar asked Feb 28 '17 17:02

tengen


People also ask

Which command is correct regarding to Tslint?

tslint accepts the following command-line options: -c, --config: The location of the configuration file that tslint will use to determine which rules are activated and what options to provide to the rules. If no option is specified, the config file named tslint.

What is the use of Tslint json file?

When using the CLI or many third-party tools, a file named tslint. json or tslint. yaml is used to configure which rules get run and each of their options.

Where is Tslint json located?

By default, GoLand uses the TSLint package from the project node_modules folder and the tslint. json configuration file from the folder where the current file is stored. If no tslint. json is found in the current file folder, GoLand will look for one in its parent folders up to the project root.


2 Answers

As far as a script you can run from the command line is concerned, you can try using npm-watch: https://www.npmjs.com/package/npm-watch.

I've used it to successfully do what you're talking about. Here's what I did:

Installed npm-watch to my project:

$ npm install npm-watch --save-dev

Added the following to my package.json file:

"watch": {
    "lint": "src/main.ts"
},
"scripts": {
    "lint": "tslint src/**/*.ts -t verbose",
    "watch": "npm-watch"
},

I figure npm-watch is a good tool for giving watch functionality to tools that don't have it, like tslint.

Update:

Also, if you don't want to add a "watch" section to your package.json file, I've actually just discovered a new tool I like even better called chokidar. It allows you to specify the file selectors and command you want to run all on the same line.

Here's my updated package.json:

"scripts": {
    "lint:watch": "chokidar webpack.config.* src/**/*.ts buildScripts/**/*.ts -c \"npm run lint\" --initial --verbose"
},

You basically give it one or more file selectors, and then use the '-c' parameter to specify the command you want run when any of those files are changed.

So now you can just run the command:

$ npm run lint:watch

I like to run it with the --initial flag set, so it doesn't wait for any files to change before executing the command.

like image 157
jalbr74 Avatar answered Sep 17 '22 12:09

jalbr74


If you are using TypeScript, then you can probably use tsc -w to watch the changes.

 "scripts": {
    "start": "tsc -w",
  }
like image 33
Ishan Patel Avatar answered Sep 20 '22 12:09

Ishan Patel