javascript - Kuinka asentaa TypeScript + Babel + Webpack?
Minulla on nämä riippuvuudet:
"devDependencies": {
"@types/node": "^4.0.27-alpha",
"babel-core": "^6.10.4",
"babel-loader": "^6.2.4",
"babel-polyfill": "^6.9.1",
"babel-preset-es2015": "^6.9.0",
"babel-preset-stage-0": "^6.5.0",
"ts-loader": "^0.8.2",
"typescript": "^2.0.0",
"webpack": "^1.13.1"
}
.babelrc:
{
"presets": [
"es2015",
"stage-0"
]
}
tsconfig.json:
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"noImplicitAny": false,
"sourceMap": false,
"outDir": "built"
},
"exclude": [
"node_modules"
]
}
webpack.config.js:
module.exports = {
entry: ['babel-polyfill', './src/'],
output: {
path: __dirname,
filename: './built/bundle.js',
},
resolve: {
modulesDirectories: ['node_modules'],
extensions: ['', '.js', '.ts'],
},
module: {
loaders: [{
test: /\.tsx?$/, loaders: ['ts-loader', 'babel-loader'], exclude: /node_modules/
}],
}
};
/src/index.ts:
async function foo() {
const value = await bar();
console.log(value);
}
function bar() {
return new Promise((resolve, reject) => {
return resolve(4);
});
}
(async function run() {
await foo();
}());
Tällä asetuksella se toimii, pystyn kääntämään ja ajamaan sen (lokit 4 oikein). Kuitenkin saan aina joitain virheitä Webpackissa:
ERROR in ./src/index.ts
(4,32): error TS2304: Cannot find name 'regeneratorRuntime'.
ERROR in ./src/index.ts
(6,12): error TS2304: Cannot find name 'regeneratorRuntime'.
ERROR in ./src/index.ts
(31,451): error TS2346: Supplied parameters do not match any signature of call target.
ERROR in ./src/index.ts
(40,33): error TS2304: Cannot find name 'regeneratorRuntime'.
ERROR in ./src/index.ts
(41,12): error TS2304: Cannot find name 'regeneratorRuntime'.
Näyttää siltä, että sillä on jotain tekemistä babel-polyfill:n kanssa. Mitä olen unohtanut?
Vastaus #1
Babel 7 ei tarvitse ts-loaderia.
Babel 7:n jälkeen ts-loader ei ole tarpeen, koska Babel 7 ymmärtää TypeScriptin. Täydelliset tiedot TypeScript + Babel7 + Webpack -asetuksesta löytyvät täältä.
Yleiskatsaus asennukseen ilman ts-loaderia.
Asenna Babelin TypeScript-tuki. Vain @babel/preset-typescript on pakollinen; muut kolme lisäävät lisäominaisuuksia, joita TypeScript tukee.
npm install --save-dev @babel/preset-typescript
npm install --save-dev @babel/preset-env
npm install --save-dev @babel/plugin-proposal-class-properties
npm install --save-dev @babel/plugin-proposal-object-rest-spread
Määritä lisäasetukset .babelrc -lisäosat ja -esiasetukset.
{
"presets": [
"@babel/preset-env",
"@babel/preset-typescript"
],
"plugins": [
"@babel/proposal-class-properties",
"@babel/proposal-object-rest-spread"
]
}
Ja päivitä webpack.config.js -tiedostosi (muu koodi on jätetty selkeyden vuoksi pois).
module: {
rules: [
{
test: /\.(js|jsx|tsx|ts)$/,
exclude: /node_modules/,
loader: 'babel-loader'
}
]
},
resolve: {
extensions: ['*', '.js', '.jsx', '.tsx', '.ts'],
},
Vastaus #2
Lataajat suorittavat aina oikealta vasemmalle, joten vaihtaminen
test: /\.tsx?$/, loaders: ['babel-loader', 'ts-loader'], exclude: /node_modules/
korjasi ongelman, koska se suorittaa ensin ts-loader.
Koko webpack.config.js -tiedosto:
module.exports = {
entry: ['babel-polyfill', './src/'],
output: {
path: __dirname,
filename: './dist/index.js',
},
resolve: {
extensions: ['', '.js', '.ts'],
},
module: {
loaders: [{
test: /\.ts$/, loaders: ['babel-loader', 'ts-loader'], exclude: /node_modules/
}],
}
};
Esimerkkiprojekti: brunolm/typescript-babel-webpack.
Vastaus #3
(4,32): virhe TS2304: Nimeä 'regeneratorRuntime' ei löydy.
Tämä on oire siitä, että babel-tulosta syötetään ts:lle. Tämä järjestys on väärä
Korjata
Käännösasetuksesi pitäisi syöttää TS-tulostus Babelille.
Vaihtoehtoisesti voit kääntää TypeScriptin pelkästään Babelilla käyttämällä @babel/preset-typescript.
Enemmän
TypeScriptin kääntäminen Babelilla: https://babeljs.io/docs/en/babel-preset-typescript
