无效的配置对象。Webpack已使用与API模式不匹配的配置对象进行初始化。

181

我有一个简单的helloworld react应用,是从在线课程中创建的,但是我得到了以下错误:

无效的配置对象。Webpack已经初始化使用一个与API模式不匹配的配置对象。 - 配置具有未知属性“postcss”。这些属性有效:object {amd?,bail?,cache?,context?,dependencies?, devServer?,devtool?,entry,externals?,loader?,module?,name? node?,output?,performance?,plugins?,profile?,recordsInputPath? recordsOutputPath?,recordsPath?,resolve?,resolveLoader?,stats? target?,watch?,watchOptions?} 对于拼写错误:请纠正它们。
对于加载程序选项:webpack 2不再允许在配置中使用自定义属性。 应该更新装载机以允许通过module.rules中的loader选项传递选项。 直到装载程序更新为止,可以使用LoaderOptionsPlugin将这些选项传递给装载程序: plugins: [ new webpack.LoaderOptionsPlugin({ // test: /.xxx$/, // may apply this only for some modules options: { postcss:... } }) ] - 配置.resolve具有未知属性'root'。这些属性有效:object {alias?,aliasFields? cachePredicate?,descriptionFiles?,enforceExtension? enforceModuleExtension?,extensions?,fileSystem?,mainFields? mainFiles?,moduleExtensions?,modules?,plugins? resolver?,symlinks?,unsafeCache?,useSyncFileSystemCalls?} - 配置.resolve.extensions [0]不应为空。

我的webpack文件为:

// work with all paths in a cross-platform manner
const path = require('path');

// plugins covered below
const { ProvidePlugin } = require('webpack');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');

// configure source and distribution folder paths
const srcFolder = 'src';
const distFolder = 'dist';

// merge the common configuration with the environment specific configuration
module.exports = {

    // entry point for application
    entry: {
        'app': path.join(__dirname, srcFolder, 'ts', 'app.tsx')
    },

    // allows us to require modules using
    // import { someExport } from './my-module';
    // instead of
    // import { someExport } from './my-module.ts';
    // with the extensions in the list, the extension can be omitted from the 
    // import from path
    resolve: {
        // order matters, resolves left to right
        extensions: ['', '.js', '.ts', '.tsx', '.json'],
        // root is an absolute path to the folder containing our application 
        // modules
        root: path.join(__dirname, srcFolder, 'ts')
    },

    module: {
        loaders: [
            // process all TypeScript files (ts and tsx) through the TypeScript 
            // preprocessor
            { test: /\.tsx?$/,loader: 'ts-loader' },
            // processes JSON files, useful for config files and mock data
            { test: /\.json$/, loader: 'json' },
            // transpiles global SCSS stylesheets
            // loader order is executed right to left
            {
                test: /\.scss$/,
                exclude: [path.join(__dirname, srcFolder, 'ts')],
                loaders: ['style', 'css', 'postcss', 'sass']
            },
            // process Bootstrap SCSS files
            {
                test: /\.scss$/,
                exclude: [path.join(__dirname, srcFolder, 'scss')],
                loaders: ['raw', 'sass']
            }
        ]
    },

    // configuration for the postcss loader which modifies CSS after
    // processing
    // autoprefixer plugin for postcss adds vendor specific prefixing for
    // non-standard or experimental css properties
    postcss: [ require('autoprefixer') ],

    plugins: [
        // provides Promise and fetch API for browsers which do not support
        // them
        new ProvidePlugin({
            'Promise': 'es6-promise',
            'fetch': 'imports?this=>global!exports?global.fetch!whatwg-fetch'
        }),
        // copies image files directly when they are changed
        new CopyWebpackPlugin([{
            from: path.join(srcFolder, 'images'),
            to: path.join('..', 'images')
        }]),
        // copies the index.html file, and injects a reference to the output JS 
        // file, app.js
        new HtmlWebpackPlugin({
            template: path.join(__dirname, srcFolder, 'index.html'),
            filename:  path.join('..', 'index.html'),
            inject: 'body',
        })
    ],

    // output file settings
    // path points to web server content folder where the web server will serve 
    // the files from file name is the name of the files, where [name] is the 
    // name of each entry point 
    output: {
        path: path.join(__dirname, distFolder, 'js'),
        filename: '[name].js',
        publicPath: '/js'
    },

    // use full source maps
    // this specific setting value is required to set breakpoints in they
    // TypeScript source in the web browser for development other source map
    devtool: 'source-map',

    // use the webpack dev server to serve up the web application
    devServer: {
        // files are served from this folder
        contentBase: 'dist',
        // support HTML5 History API for react router
        historyApiFallback: true,
        // listen to port 5000, change this to another port if another server 
        // is already listening on this port
        port: 5000,
        // proxy requests to the JSON server REST service
        proxy: {
            '/widgets': {
                // server to proxy
                target: 'http://0.0.0.0:3010'
            }
        }
    }

};

在我的情况下,我在我的AureliaJs应用程序中运行了一个错误的命令来运行我的单元测试,例如:"au run test"而不是"au test",所以要小心。希望能帮助到别人,节省时间。 - undefined
35个回答

0

对我来说,这个方法可行:只需从项目目录路径中删除所有!(感叹号),例如从"C:\Users}\Desktop\Node\HelloWorld!\new"改为"C:\Users}\Desktop\Node\HelloWorld\new"

或者,使您的项目目录路径干净,即删除项目目录路径中的所有特殊字符(例如!,@等)。


0
如果你正在使用支持monorepo的Expo 46和Create React App,则webpack版本不同。 它无法正确处理传递,因此您必须在expo应用程序项目中显式添加这些版本。
yarn add --dev webpack-dev-server@3.11 webpack@4.43 webpack-manifest-plugin@2.2

0
尝试将devtool设置为'eval-cheap-module-source-map'而不是'cheap-module-eval-source-map'。

0

我在尝试使用 WebPack5 与 Cypress 和 Cucumber(基于此示例 https://github.com/TheBrainFamily/cypress-cucumber-webpack-typescript-example)时遇到了这个问题。将 plugin\index.js 更改为以下内容对我有用!

const browserify = require('@cypress/browserify-preprocessor');
const cucumber = require('cypress-cucumber-preprocessor').default;

module.exports = (on, config) => {
  const options = {
    ...browserify.defaultOptions,
    typescript: require.resolve('typescript'),
  };

  on('file:preprocessor', cucumber(options));
  on('task', {
    log(message) {
      console.log(message)

      return null
    },
  })
};

0

试试这段代码,问题在于规则必须是一个列表或数组...

module:{
    rules:[
        {
            test:/\.js$/,
            exclude: /node_modules/,
            use:{
                loader:'babel-loader'
            },
        }
    ]
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接