tslint-загрузчик с webpack 2.1.0-бета.25

#typescript #webpack #tslint #webpack-2

#typescript #webpack #tslint #webpack-2

Вопрос:

У меня есть проект angular2, который я сжимаю / компилирую с помощью webpack.

Я использую загрузчик tslink с webpack, поэтому у меня есть конфигурация, связанная с tslint webpack.config.js .

 module.exports = {
...
tslint: {
    configuration: {
        rules: {
            quotemark: [true, "double"]
        }
    },

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

    // tslint does not interrupt the compilation by default
    // if you want any file with tslint errors to fail
    // set failOnHint to true
    failOnHint: true,

    // name of your formatter (optional)
    formatter: "",

    // path to directory containing formatter (optional)
    formattersDirectory: "node_modules/tslint-loader/formatters/",

    // These options are useful if you want to save output to files
    // for your continuous integration server
    fileOutput: {
        // The directory where each file"s report is saved
        dir: "./webpack-log/",

        // The extension to use for each report"s filename. Defaults to "txt"
        ext: "xml",

        // If true, all files are removed from the report directory at the beginning of run
        clean: true,

        // A string to include at the top of every report file.
        // Useful for some report formats.
        header: "<?xml version="1.0" encoding="utf-8"?>n<checkstyle version="5.7">",

        // A string to include at the bottom of every report file.
        // Useful for some report formats.
        footer: "</checkstyle>"
    }
},
...
preLoaders: [
        {
            test: /.ts$/,
            loader: "tslint"
        }
    ],
}
}
  

Я обновил webpack 1.13.1 до 2.1.0-beta.25, и конфигурация tslint прерывает процесс усложнения npm run build .

Я изменил preLoaders директиву на loaders

 module: {
        ....
        {
            test: /.ts$/,
            loader: 'tslint',
            exclude: /(node_modules)/,
            enforce: 'pre'
        },
    ],
}
  

этого недостаточно, потому что я все еще получаю ошибку

 For loader options: webpack 2 no longer allows custom properties in configuration.
 Loaders should be updated to allow passing options via loader options in module.rules.
  

поэтому я должен переместить конфигурацию tslint и поместить ее в другое место. здесь вроде как потеряно. поэтому любая информация, касающаяся проблемы, будет с благодарностью принята.

Спасибо!

Ответ №1:

Для других, у кого есть проблемы с загрузчиками в webpack 2. В бета-версии v2.1-beta.23 есть критические изменения с загрузчиками до / после загрузки.

Сначала раздел «загрузчики» следует переименовать в «правила». Кроме того, pre / postLoaders теперь определяется в правилах.

В моем случае я использовал tslint в качестве предварительного загрузчика. Чтобы добавить предварительный / последующий загрузчик в правила, добавьте enforce свойство со значением либо pre или post .

 module: {
    rules: [
        {
            enforce: 'pre',
            test: /.tsx?$/,
            loader: 'tslint',
            exclude: /(node_modules)/,
        },
        {
            test: /.tsx?$/,
            loaders: ['awesome-typescript-loader'],
            exclude: /(node_modules)/
        }
    ]
}
  

Больше информации в выпуске на github: Webpack v2.1.0-бета.23

В информации о выпуске также есть ссылка на запрос на извлечение, который показывает необходимые изменения, идущие от v2.1.0-beta.22 к v2.1.0-beta.23 в файле конфигурации webpack. Там вы можете видеть, что вам также нужен плагин LoaderOptionsPlugin .

 plugins: [
    new webpack.LoaderOptionsPlugin({
        options: {
            tslint: {
                emitErrors: true,
                failOnHint: true
            }
        }
    })
]
  

Комментарии:

1. Потрясающий ответ. Могу ли я использовать node_modules без круглых скобок? Спасибо.

Ответ №2:

хорошо .. так что мне просто нужно было переместить tslint определение в:

 plugins: [
    new LoaderOptionsPlugin({
        options: {
           tslint: {
             ...
  

и объявленный

 const LoaderOptionsPlugin = require("webpack/lib/LoaderOptionsPlugin");
  

Ответ №3:

Если вы не хотите добавлять плагин, вы можете сделать что-то вроде этого,

 module: {
  rules: [
    {
      enforce: 'pre',
      test: /.ts$/,
      loader: 'tslint-loader?'   JSON.stringify({
        emitErrors: true,
        failOnHint: true
      })
    }
  ]
}