#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
})
}
]
}