webpack.config.jsjavascript
const cpus = require('os').cpus().length;
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
module.exports = {
module: {
rules: [
// 單進程
//{
// test: /\.tsx?$/,
// 默認狀況下,ts-loader 會進行轉譯和類型檢查
// 由於是單進程,因此 webpack 能夠收集到錯誤信息,並經過 dev-server 反饋到瀏覽器
// 但這也致使了 webpack 構建速度極慢
// use:['ts-loader']
//},
// 多進程
{
test: /\.tsx?$/,
exclude: /node_modules/,
use: [
{loader: 'cache-loader'},
{
loader: 'thread-loader',
options: {
workers: cpus - 1,
},
},
'babel-loader',
{
loader: 'ts-loader',
options: {
// 關閉類型檢查,即只進行轉譯
// 類型檢查交給 fork-ts-checker-webpack-plugin 在別的的線程中作
// transpileOnly: true,
// 若是設置了 happyPackMode 爲 true
// 會隱式的設置 transpileOnly: true
happyPackMode: true
// 若是是 vue 應用,須要配置下這個
// appendTsSuffixTo: [/\.vue$/]
}
}
]
},
{
test: /\.(js|jsx)$/,
use: ['happypack/loader?id=js'],
exclude: [/node_modules/, /(.|_)min\.js$/],
// include: [
// path.resolve(__dirname, "src")
// ],
}
],
},
plugins: [
// fork 一個進程進行檢查
new ForkTsCheckerWebpackPlugin({
// async 爲 false,同步的將錯誤信息反饋給 webpack,若是報錯了,webpack 就會編譯失敗
// async 默認爲 true,異步的將錯誤信息反饋給 webpack,若是報錯了,不影響 webpack 的編譯
// async: false,
// eslint: false,
checkSyntacticErrors: true
})
]
};
複製代碼
tsconfig.jsonhtml
{
"compilerOptions": {
//"module": "commonjs",
"target": "es5",
/* 'react' 模式下,ts 會將 tsx 編譯成 jsx 後再將 jsx 編譯成 js*/
/* 'preserve' 模式下:TS 會將 tsx 編譯成 jsx 後,再也不將 jsx 編譯成 js,保留 jsx */
/* 保留 jsx 時,就須要在 ts-loader 前面配置 babel-loader 去處理 jsx */
/* 換句話說:只有想要用 babel-laoder 的時候,才須要設置這個值 */
"jsx": "preserve",
},
}
複製代碼
const cpus = require('os').cpus().length;
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
module.exports = {
module: {
rules: [
{
test: /\.tsx?$/,
exclude: /node_modules/,
use: [
'babel-loader',
{
loader: 'ts-loader',
options: {
// 關閉類型檢查,即只進行轉譯
// 類型檢查交給 fork-ts-checker-webpack-plugin 在別的的線程中作
transpileOnly: true,
}
}
]
},
{
test: /\.(js|jsx)$/,
use: ['happypack/loader?id=js'],
exclude: [/node_modules/, /(.|_)min\.js$/],
// include: [
// path.resolve(__dirname, "src")
// ],
}
],
},
plugins: [
// fork 一個進程進行檢查
new ForkTsCheckerWebpackPlugin({
// async 爲 false,同步的將錯誤信息反饋給 webpack,若是報錯了,webpack 就會編譯失敗
// async 默認爲 true,異步的將錯誤信息反饋給 webpack,若是報錯了,不影響 webpack 的編譯
// async: false,
// eslint: false,
checkSyntacticErrors: true
})
]
};
複製代碼
tsconfig.jsonvue
{
"compilerOptions": {
//"module": "commonjs",
"target": "es5",
/* 'react' 模式下,ts 會將 tsx 編譯成 jsx 後再將 jsx 編譯成 js*/
/* 'preserve' 模式下:TS 會將 tsx 編譯成 jsx 後,再也不將 jsx 編譯成 js,保留 jsx */
/* 保留 jsx 時,就須要在 ts-loader 前面配置 babel-loader 去處理 jsx */
/* 換句話說:只有想要用 babel-laoder 的時候,才須要設置這個值 */
"jsx": "preserve",
},
}
複製代碼
webpack.config,jsjava
rules: [
{
test:/\.(tsx?|jsx?)$/,
// 默認會調用 @babel/core
use:'babel-loader'
}
]
複製代碼
.babelrcnode
{
"presets": [
"@babel/preset-env"
"@babel/preset-react",
"@babel/preset-typescript"
]
}
複製代碼
It's possible to parallelise your builds. Historically this was useful from a performance perspective with webpack 2 / 3. With webpack 4+ there appears to be significantly less benefit and perhaps even cost.
But if that's what you want to do, there's two ways to achieve this: happypack and thread-loader. Both should be used in combination with fork-ts-checker-webpack-plugin for typechecking.)react
package.jsonwebpack
{
"scripts": {
// 再開一個 npm 腳本自動檢查類型
"type-check": "tsc --watch",
},
"devDependencies": {
"@babel/cli": "^7.4.4",
"@babel/core": "^7.4.5",
"@babel/plugin-proposal-class-properties": "^7.4.4",
"@babel/plugin-proposal-object-rest-spread": "^7.4.4",
"@babel/preset-env": "^7.4.5",
"@babel/preset-typescript": "^7.3.3",
"typescript": "^3.5.2"
}
}
複製代碼
tsconfig.jsongit
{
"compilerOptions": {
// 不生成文件,只作類型檢查
"noEmit": true,
},
}
複製代碼
有四種語法在 babel 中是沒法編譯的github
import
/export
),在推薦的 tslint 規則中也建議不要使用 namesapce。namespace Person{
const name = 'abc';
}
複製代碼
interface Person {
name: string;
age: number
}
let p1 = {age: 18} as Person;
console.log(p2.name);
let p2 = <Person>{age: 18};
console.log(p3.name);
複製代碼
const enum Sex {
man,
woman
}
複製代碼
import xxx= require(…)
和 export = xxx
。[譯] TypeScript 和 Babel:一場美麗的婚姻web
使用@babel/preset-typescript取代awesome-typescript-loader和ts-loader
https://segmentfault.com/q/1010000019545436