webpack - Modulbygging mislyktes: Feil: Typescript ga ingen utdata for
Når jeg prøver å kompilere en .ts-fil får jeg følgende feil:
Module build failed: Error: Typescript emitted no output for C:\xampp\htdocs\node-api\src\js\server.ts.
at successLoader (C:\xampp\htdocs\node-api\node_modules\ts-loader\dist\index.js:39:15)
at Object.loader (C:\xampp\htdocs\node-api\node_modules\ts-loader\dist\index.js:21:12)
For kompilering bruker jeg følgende konfigurasjonsfiler.
Webpack :
const path = require( 'path' ),
CleanWebpackPlugin = require( 'clean-webpack-plugin' );
module.exports = env => {
return {
mode: env.dev ? 'development' : 'production',
entry: {
'server': './src/js/server.ts'
},
output: {
path: __dirname,
filename: './dist/js/[name].js',
},
externals: '/node_modules',
module: {
rules: [
{
test: /\.js$/,
exclude: ['/node_modules/', '/src/scss/'],
use: [
'babel-loader'
]
},
{
test: /\.ts(x?)$/,
exclude: ['/node_modules/', '/src/scss/'],
use: [
'babel-loader',
'ts-loader',
]
},
{
test: /\.json$/,
loader: 'json-loader'
},
]
},
resolve: {
extensions: ['.ts', '.tsx', '.js' ],
alias: {
'@': path.resolve(__dirname, './src/js')
}
},
plugins: [
new CleanWebpackPlugin(['./dist/js', './dist/css']),
]
}
};
Typescript:
{
"compilerOptions": {
"removeComments": true,
"preserveConstEnums": true,
"allowJs": true,
"outDir": "./dist/js",
"target": "es5",
"moduleResolution": "node",
"module": "es2015",
"lib": [
"es2015",
"es2016"
]
},
"exclude": [
"node_modules"
]
}
Babel :
{
"presets": [
[
"env", {
"targets": {
"node": "current"
}
}
],
"stage-2", "es2015"
],
"plugins": ["dynamic-import-node"]
}
Som foreslått i noen andre spørsmål har jeg allerede endret rekkefølgen på resolve-utvidelsene, men det løste det ikke (.js før .ts). Typescript 2.8.3 brukes i kombinasjon med Node 8.11.1 og Mongoose 5.0.15 og kompileres av Webpack 4.6. Så jeg lurer fortsatt på hvordan man kan løse feilen nevnt ovenfor.
Svar #1
Vennligst sett noEmit til false i din tsconfig.json. Som standard er den satt til true, når vi endrer den til false kan det hende vi ikke får denne feilen.
"noEmit": falseSvar #2
Overstyr compilerOptions slik i webpack-konfigurasjonen (når du bruker ts-loader):
rules: [
{
test: /\.[jt]s$/,
exclude: /(node_modules)/,
use: [
{
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
},
},
{
loader: 'ts-loader',
options: {
compilerOptions: {
noEmit: false,
},
},
},
],
},
]
