Weboldal keresés

Webpack: TypeScript modul importálása egyszerre „normálisan” és nyers szövegként


A webpack ^v2.2.1 használatával szeretnék egy TypeScript modul szövegként történő importálását, a modul „normális” importálása mellett is.

Rájöttem, hogy valószínűleg a raw-loader-t kellene használnom. De ez nem működik.

Néhány példa kód:

import DemoComponent from './demo'
import demoCode from 'raw-loader!./demo'

A TypeScript kiabál velem, hogy valami olyasmi, mint

error TS2307: Cannot find module 'raw-loader!./demo'.

A ts-loader-t használom.

Itt van a webpack.config.js-em:

const { resolve } = require('path')
const fail = require('webpack-fail-plugin')

const config = {
  entry: './docs/index.ts',
  output: {
    filename: 'bundle.js',
    path: resolve(__dirname, 'docs-build')
  },
  resolve: {
    extensions: [ '.ts', '.js' ]
  },
  devtool: 'inline-source-map',
  module: {
    rules: [
      {
        enforce: 'pre',
        test: /\.js$/,
        loader: 'source-map-loader'
      },
      {
        test: /\.ts$/,
        loader: 'ts-loader'
      },
      {
        test: /\.scss$/,
        use: [
          'style-loader',
          {
            loader: 'css-loader',
            options: {
              sourceMap: true
            }
          },
          'sass-loader'
        ]
      }
    ]
  },
  plugins: [
    fail
  ]
}

module.exports = config

Válasz #1

Abban az esetben, ha valaki megoldást keres erre a válaszra. A import használata a legjobb opció - típussal rendelkezik, és lehetővé teszi a modulcsomagolóktól, mint a Rollup és a Webpack 3+, a import és a require exportálásakor történő optimalizálásokat:

Létre kell hoznod egy raw-loader.d.ts fájlt, és győződj meg róla, hogy az szerepel a tsconfig.json fájlodban. Írd be a következő tartalmat:

declare module '!!raw-loader!*' {
  const contents: string
  export = contents
}

tsconfig.json:

{
    "compilerOptions": {
        "types": ["raw-loader.d.ts", "node"]
    }
}

Válasz #2

Úgy tűnik, hogy a következő működik:

import DemoComponent from './demo'
const demoCode = require('!!raw-loader!./demo')

De nem vagyok biztos benne, hogy ez mennyire helyes. Szeretnék találni valamilyen dokumentációt a betöltők sorrendjéről és működéséről.

Emellett azt részesíteném előnyben, ha következetes lennék, és inkább import utasításokat használnék. De a TypeScript panaszkodik, ha közvetlen átállítást végzek:

import DemoComponent from './demo'
import demoCode from '!!raw-loader!./demo'

A hiba egyszerű

error TS2307: Cannot find module '!!raw-loader!./demo'.

Kapcsolódó cikkek