当前没有配置任何加载程序来处理此文件

时间:2020-07-03 08:22:56

标签: reactjs typescript webpack

我有一个TypeScript(TS),React项目,用于容纳我的所有React组件。我正在从该项目中创建一个NPM包,然后在单独的React项目中使用它。为了解决以前的.css和映像文件不属于我的软件包的问题,​​我现在尝试实现Webpack,但是我的知识上确实有漏洞。

尝试运行Webpack时,出现多个类似错误:
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file.

我已经安装了所有我认为必要的装载机:

  • style-loader
  • ts-loader
  • 文件加载器

webpack.config.js

const path = require('path');

module.exports = {
    entry: './src/index.ts',
    devtool: 'inline-source-map',
    module: {
        rules: [
        {
            test: /\.tsx?$/,
            use: 'ts-loader',
            exclude: /node_modules/,
        },
        ],
    },
    resolve: {
        extensions: [ '.tsx', '.ts', '.js' ],
    },
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                use: [
                    'style-loader',
                    'css-loader'
                ]
            },
            {
                test: /\.(png|svg|jpg)$/,
                use: [
                    'file-loader',
                ],
            },
        ]
    }
};

tsconfig.json

{
  "compilerOptions": {
    "outDir": "dist",
    "target": "esnext",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": false,
    "jsx": "react",
    "noImplicitAny": true,
    "sourceMap": true,
  },
  "include": [
    "src"
  ]
}

package.json

{
  "name": "@private_feed/generic.project",
  "version": "0.1.7",
  "files": [
    "dist"
  ],
  "main": "dist/index.js",
  "dependencies": {
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.5.0",
    "@testing-library/user-event": "^7.2.1",
    "@types/jest": "^24.9.1",
    "@types/node": "^12.12.47",
    "@types/react": "^16.9.41",
    "@types/react-dom": "^16.9.8",
    "@types/styled-components": "^5.1.0",
    "cross-env": "^7.0.2",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-scripts": "3.4.1",
    "styled-components": "^5.1.1"
  },
  "scripts": {
    "start": "react-scripts start",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "storybook": "start-storybook -p 9009 -s public",
    "build-storybook": "build-storybook -s public",
    "build": "webpack"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "@storybook/addon-actions": "^5.3.19",
    "@storybook/addon-knobs": "^5.3.19",
    "@storybook/addon-links": "^5.3.19",
    "@storybook/addons": "^5.3.19",
    "@storybook/preset-create-react-app": "^3.1.2",
    "@storybook/react": "^5.3.19",
    "css-loader": "^3.6.0",
    "file-loader": "^6.0.0",
    "style-loader": "^1.2.1",
    "ts-loader": "^7.0.5",
    "typescript": "^3.9.6",
    "webpack": "^4.43.0",
    "webpack-cli": "^3.3.12"
  },
  "babel": {
    "presets": [
      "react-app"
    ]
  },
  "description": "This project was bootstrapped with [Create React App].",
  "author": "",
  "license": "ISC"
}

1 个答案:

答案 0 :(得分:0)

我通过反复试验发现了问题。 webpack.config.js对两个单独的模块部分不满意。

下面是导致捆绑成功的配置。

webpack.config.js

const path = require('path');

module.exports = {
    entry: './src/index.ts',
    devtool: 'inline-source-map',
    module: {
        rules: [
            {
                test: /\.css$/,
                use: [
                    'style-loader',
                    'css-loader'
                ]
            },
            {
                test: /\.(png|svg|jpg)$/,
                use: [
                    'file-loader',
                ],
            },
            {
                test: /\.tsx?$/,
                use: 'ts-loader',
                exclude: /node_modules/,
            },
        ]
    },
    resolve: {
        extensions: [ '.tsx', '.ts', '.js' ],
    },
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
    },
};