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'.
