web-dev-qa-db-fra.com

webpack3 jshint-loader ne fonctionne pas

J'essaie de suivre cette instruction https://webpack.js.org/loaders/jshint-loader/ Et obtenir une erreur:

Mon fichier de configuration: 

const path = require('path');

    module.exports = {
      entry: {
        app: './index.js'
      },
      output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
      },

      module: {
        rules: [
          {
            test: /\.js$/, // include .js files
            enforce: "pre", // preload the jshint loader
            exclude: /node_modules/, // exclude any and all files in the node_modules folder
            use: [
              {
                loader: "jshint-loader"
              }
            ]
          }
        ]
      },

      // more options in the optional jshint object
      jshint: {
        // any jshint option http://www.jshint.com/docs/options/
        // i. e.
        camelcase: true,

        // jshint errors are displayed by default as warnings
        // set emitErrors to true to display them as errors
        emitErrors: false,

         // jshint to not interrupt the compilation
         // if you want any file with jshint errors to fail
         // set failOnHint to true
         failOnHint: false,

         // custom reporter function
         reporter: function(errors) { }
       }
    };

texte d'erreur: 

Objet de configuration invalide. Webpack a été initialisé à l'aide d'un objet de configuration qui ne correspond pas au schéma de l'API . - configuration a une propriété inconnue 'jshint'. Ces propriétés sont valides: objet {amd?, bail ?, cache ?, contexte?, dépendances ?, devServer ?, devtool ?, entrée, externals ?, chargeur ?, module ?, nom ?, noeud ?, sortie ?, performance?, plugins? ile ?, recordsInputPath ?, recordsOutputPath ?, recordsPath ?, resolution ?, resolLoader ?, stats ?, cible ?, regarder ?, watchOptions? } Pour les fautes de frappe: corrigez-les s'il vous plaît . Pour les options du chargeur: webpack 2 n'autorise plus les propriétés personnalisées dans la configuration.

9
V. Zorin

Les instructions sur leur site Web semblent être obsolètes car cela ne fonctionne pas vraiment. Il y a un problème en suspens à ce sujet sur Github .

Cette configuration devrait fonctionner:

const path = require('path');

module.exports = {
  entry: {
    app: './index.js'
  },
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  },

  module: {
    rules: [{
      test: /\.js$/, // include .js files
      enforce: "pre", // preload the jshint loader
      exclude: /node_modules/, // exclude any and all files in the node_modules folder
      use: [{
        loader: "jshint-loader",
        // more options in the optional jshint object
        options: {  // ⬅ formally jshint property
          camelcase: true,
          emitErrors: false,
          failOnHint: false
        }
      }]
    }]
  },
};
38
Tom Van Rompaey

La seule chose qui a fonctionné pour moi a été de modifier manuellement le fichier de jshint-loader. 

  1. Allez à [votre chemin de projet] /node_modules/jshint-loader/index.js.
  2. Recherchez la fonction "jsHint" (ligne 61) puis passez à la ligne 63.
  3. Remplacez "if (this.options.jshint)" par "if (options.jshint)".
  4. Après le changement, la fonction ressemblera à ceci:

    
     fonction jsHint (entrée, options) {
     // options de copie dans un objet 
     if (options.jshint) {
     pour (nom de var dans this.options.jshint) {
     options [nom] = this.options.jshint [nom]; 
     } 
     } 
     // fonction continue ...
    } 
    
    
0
Gabriel Ullmann