188 votes

Objet de configuration non valide. Webpack a été initialisé en utilisant un objet de configuration qui ne correspond pas au schéma de l'API.

J'ai créé cette simple application react helloworld à partir d'un cours en ligne, mais j'obtiens cette erreur :

Objet de configuration non valide. Webpack a été initialisé en utilisant un objet de configuration qui ne correspond pas au schéma de l'API. - La configuration a une propriété inconnue 'postcss'. Ces propriétés sont valides : object { amd ?, bail ?, cache ?, context ?, dependencies ?, devServer ?, devtool ?, entry, externals ?, loader ?, module ?, name ?, node ?, output ?, performance ?, plugins ?, profile ?, recordsInputPath ? recordsO utputPath ?, recordsPath ?, resolve ?, resolveLoader ?, stats ? target ?, watch ?, watchOptions ? } Pour les fautes de frappe : veuillez les corriger.
Pour les options du chargeur : webpack 2 ne permet plus les propriétés personnalisées dans la configuration. Les chargeurs doivent être mis à jour pour permettre de passer des options via les options du chargeur dans module.rules. Jusqu'à ce que les chargeurs soient mis à jour, on peut utiliser le LoaderOptionsPlugin pour passer ces options au chargeur : plugins : [ new webpack.LoaderOptionsPlugin({ // test : /.xxx$/, // peut s'appliquer uniquement à certains modules options : { postcss : ... } }) ] - configuration.resolve a une propriété inconnue 'Root'. Ces propriétés sont valides : objet { alias ?, aliasFields ?, cachePredicate ?, descriptionFiles ?, enforceExtension ? enforceModuleExtension ?, extensions ?, fileSystem ?, mainFields ?, mainFiles ?, moduleExtensions ?, modules ?, plugins ?, resolver ?, symlinks ?, unsafeCache ?, useSyncFileSystemCalls ? } - configuration.resolve.extensions[0] ne doit pas être vide.

Mon fichier webpack est :

// 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'
            }
        }
    }

};

0 votes

62voto

Ivo Amaral Points 331

Il suffit de remplacer "loaders" par "rules" dans "webpack.config.js".

Parce que loaders est utilisé dans Webpack 1, et rules dans Webpack2. Vous pouvez voir qu'il y a différences .

41voto

James L. Points 2741

J'ai résolu ce problème en supprimant les chaînes vides de mon tableau resolve. Consultez la documentation de resolve sur site de webpack .

//Doesn't work
module.exports = {
  resolve: {
    extensions: ['', '.js', '.jsx']
  }
  ...
}; 

//Works!
module.exports = {
  resolve: {
    extensions: ['.js', '.jsx']
  }
  ...
};

2 votes

Pourquoi cela ne fonctionne-t-il plus ? Dans les anciennes versions de webpack, je vois toujours la chaîne vide au premier indice de extensions valeur du tableau

34voto

Jarosław Cichoń Points 347

Je ne sais pas exactement ce qui provoque ça, mais je le résous de cette façon.
Réinstallez tout le projet mais rappelez-vous que webpack-dev-server doit être installé globalement.
J'ai traversé quelques erreurs de serveur comme webpack cant be found, donc j'ai lié Webpack en utilisant la commande link.
En sortie Résoudre quelques problèmes de chemin absolu.

Dans devServer object: inline: false

webpack.config.js

module.exports = {
    entry: "./src/js/main.js",
    output: {
        path:__dirname+ '/dist/',
        filename: "bundle.js",
        publicPath: '/'
    },
    devServer: {
        inline: false,
        contentBase: "./dist",
    },
    module: {
        loaders: [
            {
                test: /\.jsx?$/,
                exclude:/(node_modules|bower_components)/,
                loader: 'babel-loader',
                query: {
                    presets: ['es2015', 'react']
                }
            }
        ]
    }

};

paquet.json

{
  "name": "react-flux-architecture-es6",
  "version": "1.0.0",
  "description": "egghead",
  "main": "index.js",
  "scripts": {
    "start": "webpack-dev-server"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/cichy/react-flux-architecture-es6.git"
  },
  "keywords": [
    "React",
    "flux"
  ],
  "author": "Jarosaw Cicho",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/cichy/react-flux-architecture-es6/issues"
  },
  "homepage": "https://github.com/cichy/react-flux-architecture-es6#readme",
  "dependencies": {
    "flux": "^3.1.2",
    "react": "^15.4.2",
    "react-dom": "^15.4.2",
    "react-router": "^3.0.2"
  },
  "devDependencies": {
    "babel-core": "^6.22.1",
    "babel-loader": "^6.2.10",
    "babel-preset-es2015": "^6.22.0",
    "babel-preset-react": "^6.22.0"
  }
}

1 votes

J'ai simplement supprimé l'installation locale de webpack-dev-server et l'ai installée globalement.

54 votes

Je pense que le loaders ont été remplacés par rules voir webpack.js.org/concepts/chargeurs

0 votes

@OlotinTemitope Ouais, merci ! Cela résout mon problème !

30voto

Rushit Points 41

Essayez les étapes suivantes :

npm uninstall webpack --save-dev

suivi par

npm install webpack@2.1.0-beta.22 --save-dev

Ensuite, vous devriez être capable d'avaler à nouveau. Cela a réglé le problème pour moi.

17voto

Je suppose que votre version de webpack est 2.2.1. Je pense que vous devriez utiliser ce guide de migration --> https://webpack.js.org/guides/migrating/

Vous pouvez également utiliser cet exemple de TypeSCript + Webpack 2 .

0 votes

Et si c'était toujours un problème avec webpack 3 ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X