programing

모듈 빌드 실패:오류: 다음에 대한 출력이 없는 형식 스크립트입니다.

lovejava 2023. 7. 8. 10:24

모듈 빌드 실패:오류: 다음에 대한 출력이 없는 형식 스크립트입니다.

.ts 파일을 컴파일하려고 하면 다음 오류가 발생합니다.

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)

컴파일을 위해 다음 구성 파일을 사용합니다.

웹 팩:

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']),
        ]
    }
};

유형 스크립트:

{
    "compilerOptions": {
        "removeComments": true,
        "preserveConstEnums": true,
        "allowJs": true,
        "outDir": "./dist/js",
        "target": "es5",
        "moduleResolution": "node",
        "module": "es2015",
        "lib": [
            "es2015",
            "es2016"
        ]
    },
    "exclude": [
        "node_modules"
    ]
}

바벨:

{
    "presets": [
        [
            "env", {
                "targets": {
                    "node": "current"
                }
            }
        ],
        "stage-2", "es2015"
    ],
    "plugins": ["dynamic-import-node"]
}

다른 질문에서 제안한 것처럼 확장 해결 순서를 이미 변경했지만 해결되지 않았습니다(.js전에.ts). Typescript 2.8.3은 Node 8.11.1 및 Mongoose 5.0.15와 함께 사용되며 Webpack 4.6에 의해 컴파일됩니다. 그래서 위에서 언급한 오류를 어떻게 해결해야 할지 여전히 궁금합니다.

설정하십시오.noEmit로.false당신의tsconfig.json기본적으로 다음으로 설정됩니다.true로 변경하면false이 오류가 발생하지 않을 수 있습니다.

"noEmit": false

재정의compilerOptions웹 팩 구성에서 이와 같이(사용할 때)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,
              },
            },
          },
        ],
      },
    ]

웹 팩 5 및 Typescript 4.5를 사용하여 다음과 같은 expressjs + prisma 서버를 실행할 수 있습니다.

webpack.config.js:

const path = require('path');

module.exports = {
  entry: './src/index.ts',
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        use: [
          {
            loader: 'ts-loader',
            options: {
              compilerOptions: {noEmit: false},
            }
          }
        ],
        exclude: /node_modules/,
      },
    ],
  },
  resolve: {
    extensions: ['.tsx', '.ts', '.js'],
  },
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
};

tsconfig.json:

{
  "compilerOptions": {
    "skipLibCheck": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noEmit": true,
    "esModuleInterop": true,
    "module": "CommonJS",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "jsx": "preserve",
    "incremental": true
  },
  "include": [
    "**/*.ts"
  ],
  "exclude": [
    "node_modules"
  ]
}

출처: https://webpack.js.org/guides/typescript/

제 경우에는 제가 제거해야 했습니다."emitDeclarationOnly": true에서tsconfig.json

(또는 다음으로 설정)false)

이 스위치를 켜면 출력만 됩니다.d.tsJavaScript 파일이 아닌 파일입니다.

자세히 보기: https://www.typescriptlang.org/tsconfig#emitDeclarationOnly

언급URL : https://stackoverflow.com/questions/49969071/module-build-failed-error-typescript-emitted-no-output-for