gulp構築react+typescriptプロジェクト十一:tsxの構築、検査
6369 ワード
本文は主に以下の部分を処理する. tsx を構築パスマッピング eslint検査tsx 一、tsxの構築
1、インストールに関する依存、本稿では
2、構築スクリプト
3、tsconfig.json配置
二、経路マッピング
パスマッピングには、2つの場所、構築スクリプト、tsconfig.jsonを構成する必要があります.構築スクリプトを実行するとき、tsconfig.jsonのパス構成を知らないため、両方の場所で統一的な構成が必要です.1、tsconfig.jsonにパスマッピングを加える
2、browserify構成オブジェクトのpaths属性は検索するディレクトリ転送ゲートを設定できる:https://github.com/browserify...
注意:pathsとconfig.jsonでは、パス構成が一致している必要があります.そうしないと、コンパイルまたは構築時にエラーが発生します.
三、eslint検査tsx
1、インストール依存
2、.eslintrc.js構成
3、vscodeプリファレンス-setting.jsonリスニング
参照:https://szhshp.org/tech/2020/...
1、インストールに関する依存、本稿では
tsify
プラグインを選択してtsx
を解析し、tsify
はtsconfig.json
構成に従ってtsx
を解析し、転送ゲート:https://www.npmjs.com/package....cnpm i -D tsify
2、構築スクリプト
const _script = () => {
return browserify({
entries: _path.main_js,
debug: isDev, // inline-sourcemap
}).plugin(tsify)
.transform(babelify, {
presets: ['@babel/preset-env', '@babel/preset-react'],
plugins: [
'@babel/plugin-transform-runtime',
['@babel/plugin-proposal-decorators', { 'legacy': true }],
['@babel/plugin-proposal-class-properties', { 'loose': true }]
]
})
.bundle()
.pipe(gulpif(isDev, exorcist(path.resolve(__dirname, 'dist/js/app.js.map')))) // map
.pipe(source('app.js'))
.pipe(buffer())
.pipe(gulpif(isProd, uglify()))
.pipe(gulpif(isProd, rename({suffix: '.min'})))
.pipe(gulp.dest('./dist/js'))
.pipe(gulpif(isDev, connect.reload()));
};
3、tsconfig.json配置
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"jsx": "react",
"strict": true,
"noImplicitAny": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
}
}
二、経路マッピング
パスマッピングには、2つの場所、構築スクリプト、tsconfig.jsonを構成する必要があります.構築スクリプトを実行するとき、tsconfig.jsonのパス構成を知らないため、両方の場所で統一的な構成が必要です.1、tsconfig.jsonにパスマッピングを加える
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"jsx": "react",
"strict": true,
"noImplicitAny": true,
"baseUrl": ".",
"paths": {
"components/*": ["./src/components/*"]
},
"rootDirs": ["./src"],
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
}
}
2、browserify構成オブジェクトのpaths属性は検索するディレクトリ転送ゲートを設定できる:https://github.com/browserify...
const _script = () => {
return browserify({
entries: _path.main_js,
debug: isDev, // inline-sourcemap
extensions: ['.js', '.jsx', 'tsx', '.json'],
paths: ['./src/'], // , , 。 , basedir。 NODE_PATH browserify 。
}).plugin(tsify)
.transform(babelify, {
presets: ['@babel/preset-env', '@babel/preset-react'],
plugins: [
'@babel/plugin-transform-runtime',
['@babel/plugin-proposal-decorators', { 'legacy': true }],
['@babel/plugin-proposal-class-properties', { 'loose': true }]
]
})
.bundle()
.pipe(gulpif(isDev, exorcist(path.resolve(__dirname, 'dist/js/app.js.map')))) // map
.pipe(source('app.js'))
.pipe(buffer())
.pipe(gulpif(isProd, uglify()))
.pipe(gulpif(isProd, rename({suffix: '.min'})))
.pipe(gulp.dest('./dist/js'))
.pipe(gulpif(isDev, connect.reload()));
};
注意:pathsとconfig.jsonでは、パス構成が一致している必要があります.そうしないと、コンパイルまたは構築時にエラーが発生します.
三、eslint検査tsx
1、インストール依存
cnpm i -D @typescript-eslint/parser eslint-plugin-typescript eslint-plugin-react-hooks eslint-plugin-jsx-a11y
@typescript-eslint/parser
はESLint
の解析器であり、TypeScript ESTree
によってESLint
のソースコードを整理することができる.TypeScript
はeslint-plugin-typescript
コードライブラリにTypeScript
ルールを提供するlint
eslint-plugin-react-hooks
はreact hooks
にlint
の規則を提供するeslint-plugin-jsx-a11y
静的AST
インスペクタJSX
要素のアクセス性ルール2、.eslintrc.js構成
/* eslint-disable */
module.exports = {
"env": {
"browser": true,
"es2020": true,
"node": true
},
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"plugin:@typescript-eslint/recommended",
"plugin:react-hooks/recommended",
"plugin:jsx-a11y/recommended",
],
"parser": "@typescript-eslint/parser", // ESLint , TypeScript ESTree ESLint TypeScript
"parserOptions": {
"ecmaFeatures": {
"experimentalObjectRestSpread": true, //
"jsx": true
},
"ecmaVersion": 11,
"sourceType": "module"
},
"plugins": [
"react",
"@typescript-eslint", // TypeScript lint
"react-hooks", // react hooks
"jsx-a11y", // AST , JSX 。
],
"rules": {
"@typescript-eslint/explicit-module-boundary-types": "off", //
"@typescript-eslint/ban-types": "off",
"@typescript-eslint/no-var-requires": "off",
},
"settings": {
"react": {
"version": "detect" //
}
}
};
3、vscodeプリファレンス-setting.jsonリスニング
js、jsx、ts、tsx
ファイル "eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact"
]
demo
アドレス:https://github.com/Revelation...参照:https://szhshp.org/tech/2020/...