Webpack:导入TypeScript模块"通常"并作为原始字符串

时间:2017-03-06 17:15:54

标签: typescript import webpack ts-loader raw-loader

使用webpack ^v2.2.1,我想导入一个TypeScript模块作为文本,除了导入相同的模块"通常"。

我认为我可能应该使用raw-loader。但它还没有成功。

一些示例代码:

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

TypeScript正在尖叫着像

这样的东西
error TS2307: Cannot find module 'raw-loader!./demo'.

我正在使用ts-loader

这是我的webpack.config.js

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

3 个答案:

答案 0 :(得分:6)

如果有人正在寻找这个答案的解决方案。使用import是最好的选择 - 在输出import vs require时,它将被输入并允许模块捆绑器(如Rollup和Webpack 3+)进行优化:

您需要创建raw-loader.d.ts并确保它包含在您的tsconfig.json文件中。输入以下内容:

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

tsconfig.json

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

答案 1 :(得分:2)

以下情况似乎正在发挥作用:

let person = Person()
let path = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("person").path
let personWasUploaded: Bool = NSKeyedArchiver.archiveRootObject(person, toFile:path)
print(path)
print("person uploaded: \(personWasUploaded)")

但我不确定这是多么正确。我很想找到一些关于装载机的顺序和机制的文档。

另外,我希望通过使用import DemoComponent from './demo' const demoCode = require('!!raw-loader!./demo') 语句来保持一致。但是如果我进行直接转换,TypeScript就会抱怨它:

import

错误很简单

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

答案 2 :(得分:1)

对于您的错误:

raw-loader.d.ts

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