typescript - Modulimport returnerer tomt objekt


Jeg prøver å lage en npm-modul ved å bruke Webpack og TypeScript. Etter å ha bygget pakken min og prøvd å importere den, får jeg et tomt objekt, og ikke min standard eksporterte funksjon.

Du kan se min konfigurasjon :

Webpack.js :

const webpack = require('webpack');
const path = require('path');

const config = {
  entry: './src/index.ts',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].js'
  },
  module: {
    rules: [
      {
        test: /\.ts(x)?$/,
        use: ['awesome-typescript-loader'],
        exclude: /node_modules/
      },
      {
        test: /\.css$/,
        use: [
          'style-loader',
          {
            loader: 'css-loader',
            options: {
              importLoaders: 1
            }
          },
          'postcss-loader'
        ]
      },
      {
        test: /\.scss$/,
        use: ['style-loader', 'css-loader', 'sass-loader']
      }
    ]
  },
  resolve: {
    extensions: ['.tsx', '.ts', '.js']
  }
};

module.exports = config;

tsconfig.json

{
  "compilerOptions": {
    "outDir": "./dist/",
    "sourceMap": true,
    "strict": true,
    "noImplicitReturns": true,
    "noImplicitAny": true,
    "module": "commonjs",
    "moduleResolution": "node",
    "target": "es5",
    "allowJs": true
  },
  "include": ["./src/**/*"]
}

Modulen min er bygget, men standardimporten returnerer et tomt objekt. Jeg har prøvd med eksempel-funksjonen:

const test = () => console.log('test');

export default test;
import test from 'my-module-name'; test() // test is not a function

Har noen allerede laget en npm-modul ved å bruke webpack og typescript?

Takk, fellesskap!

Svar #1

Basert på denne tråden, må du legge til libraryTarget: "commonjs2" i din webpack-konfigurasjon.

Her er eksemplet:

module.exports = {
    ...
    output: {
        path     : path.resolve(__dirname, 'dist'),
        filename : '[name].js',
        libraryTarget : 'commonjs2' // Add this line
    },
    ...
}

Jeg har implementert denne løsningen før, og den fungerer også på TypeScript + Webpack med lignende problem.

Relaterte artikler