Oggetto di configurazione non valido. Webpack è stato inizializzato utilizzando un oggetto di configurazione che non corrisponde allo schema API


103

Ho questa semplice app helloworld react creata da un corso online, tuttavia ricevo questo errore:

Oggetto di configurazione non valido. Webpack è stato inizializzato utilizzando un oggetto di configurazione che non corrisponde allo schema API. - la configurazione ha una proprietà sconosciuta "postcss". Queste proprietà sono valide: oggetto {amd ?, bail ?, cache ?, context ?, dependencies ?, devServer ?, devtool ?, entry, externals ?, loader ?, module ?, name ?, node ?, output ?, performance? , plugins ?, profilo ?, recordsInputPath ?, recordsO utputPath ?, recordsPath ?, risoluzione ?, risoluzioneLoader ?, statistiche ?, destinazione ?, guarda ?, watchOptions? } Per errori di battitura: correggili.
Per le opzioni del caricatore: webpack 2 non consente più proprietà personalizzate nella configurazione. I caricatori dovrebbero essere aggiornati per consentire il passaggio delle opzioni tramite le opzioni del caricatore in module.rules. Fino a quando i caricatori non vengono aggiornati, è possibile utilizzare LoaderOptionsPlugin per passare queste opzioni al caricatore: plugins: [new webpack.LoaderOptionsPlugin ({// test: /.xxx$/, // può applicarlo solo per alcune opzioni dei moduli: {postcss: ...}})] - configuration.resolve ha una proprietà sconosciuta 'root'. Queste proprietà sono valide: object {alias ?, aliasFields ?, cachePredicate ?, descriptionFiles ?, enforceExtension ?, enforceModuleExtension ?, extensions ?, fileSystem ?, mainFields ?, mainFiles ?, moduleExtensions ?, modules ?, plugins?, Resolver ?, symlinks ?, unsafeCache ?, useSyncFileSystemCalls? } - configuration.resolve.extensions [0] non deve essere vuoto.

Il mio file 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'
            }
        }
    }

};

Risposte:


27

Non so esattamente cosa lo causi, ma lo risolvo in questo modo.
Reinstalla l'intero progetto ma ricorda che webpack-dev-server deve essere installato globalmente.
Eseguo alcuni errori del server come webpack non può essere trovato, quindi ho collegato Webpack usando il comando link.
In output Risoluzione di alcuni problemi di percorso assoluto.

In 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']
                }
            }
        ]
    }

};

package.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": "Jarosław 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"
  }
}

la semplice rimozione dell'installazione locale di webpack-dev-server e l'installazione globale mi ha risolto il problema.
Sam

48
Penso che l' loadersopzione sia stata sostituita con rulesvedi webpack.js.org/concepts/loaders
Olotin Temitope

@OlotinTemitope Sì, grazie! Questo risolve il mio problema!
Simon

41

Basta cambiare da "caricatori" a "regole" in "webpack.config.js"

Poiché i caricatori vengono utilizzati in Webpack 1 e le regole in Webpack2. Puoi vedere che ci sono differenze .


32

Ho risolto questo problema rimuovendo la stringa vuota dal mio array di risoluzione. Consulta la documentazione sulla risoluzione sul sito di webpack .

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

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

2
Perché non funziona più? Nelle vecchie versioni del webpack vedo sempre la stringa vuota al primo indice del extensionsvalore dell'array
guilima

25

Prova i passaggi seguenti:

npm uninstall webpack --save-dev

seguito da

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

Quindi dovresti essere in grado di deglutire di nuovo. Risolto il problema per me.


16

Per le persone come me, che hanno iniziato di recente: la loadersparola chiave è sostituita con rules; anche se rappresenta ancora il concetto di caricatori. Quindi il mio webpack.config.js, per un'app React, è il seguente:

var webpack = require('webpack');
var path = require('path');

var BUILD_DIR = path.resolve(__dirname, 'src/client/public');
var APP_DIR = path.resolve(__dirname, 'src/client/app');

var config = {
  entry: APP_DIR + '/index.jsx',
  output: {
    path: BUILD_DIR,
    filename: 'bundle.js'
  },
  module : {
    rules : [
      {
        test : /\.jsx?/,
        include : APP_DIR,
        loader : 'babel-loader'
      }
    ]
  }
};

module.exports = config;


9

In webpack.config.js sostituire i loader: [..] con le regole: [..] Ha funzionato per me.


9

Il file di configurazione di Webpack è cambiato nel corso degli anni (probabilmente con ogni versione principale). La risposta alla domanda:

Perché ricevo questo errore

Invalid configuration object. Webpack has been initialised using a 
configuration object that does not match the API schema

è perché il file di configurazione non corrisponde alla versione del webpack in uso.

La risposta accettata non afferma questa e altre risposte alludono a questo ma non lo affermano chiaramente npm install webpack@2.1.0-beta.22 , cambia semplicemente da "loaders" a "rules" in "webpack.config.js " , e questo . Quindi decido di fornire la mia risposta a questa domanda.

La disinstallazione e la reinstallazione di webpack o l'utilizzo della versione globale di webpack non risolverà questo problema. Ciò che è importante è utilizzare la versione corretta di webpack per il file di configurazione utilizzato.

Se questo problema è stato risolto quando si utilizza una versione globale, probabilmente significa che la versione globale era "vecchia" e il formato di file webpack.config.js che si utilizzava è "vecchio", quindi corrispondono e le cose ora funzionano . Sono favorevole alle cose che funzionano, ma voglio che i lettori sappiano perché hanno funzionato.

Ogni volta che ottieni una configurazione di webpack che speri risolverà il tuo problema ... chiediti a quale versione di webpack è usata la configurazione.

Ci sono molte buone risorse per imparare il webpack. Alcuni sono:

  • Webpack Sito ufficiale che descrive la configurazione webpack, attualmente alla versione 4.x . Sebbene questa sia un'ottima risorsa per cercare come dovrebbe funzionare webpack, non è sempre il migliore per imparare come 2 o 3 opzioni in webpack lavorano insieme per risolvere un problema. Ma è il posto migliore per iniziare perché ti obbliga a sapere quale versione di webpack stai utilizzando. :-)
  • Webpack (v3?) Di Example : adotta un approccio di dimensioni ridotte per l'apprendimento di webpack, la scelta di un problema e quindi mostra come risolverlo in webpack. Mi piace questo approccio. Sfortunatamente non sta insegnando al webpack 4 ma è ancora buono.

  • Configurare Webpack4, Babel e React da zero, rivisitato - Questo è specifico per React ma è utile se vuoi imparare molte delle cose che sono necessarie per creare un'app a pagina singola.

  • Webpack (v3) - The Confusing Parts - Buono e copre un sacco di terreno. È datato 10 aprile 2016 e non copre webpack4, ma molti dei punti di insegnamento sono validi o utili per l'apprendimento.

Ci sono molte più buone risorse per imparare ad esempio webpack4, per favore aggiungi commenti se conosci altri. Si spera che i futuri articoli del webpack indicheranno le versioni utilizzate / spiegate.


9

Funziona usando rulesinvece diloaders

module : {
  rules : [
    {
      test : /\.jsx?/,
      include : APP_DIR,
      loader : 'babel-loader'
    }
  ]
}

7

Ho avuto lo stesso problema e l'ho risolto installando l'ultima versione di npm:

npm install -g npm@latest

e quindi modificare il webpack.config.jsfile per risolvere

- configuration.resolve.extensions [0] non deve essere vuoto.

ora risolvi l'estensione dovrebbe essere simile a:

resolve: {
    extensions: [ '.js', '.jsx']
},

quindi corri npm start.


Questo ha funzionato per me. Nel mio file webpack.config.js, avevo una voce come extentions: ['', '.js', '.jsx']. Ho rimosso l'elemento vuoto '' e ha funzionato. configuration.resolve.extensions [0] si riferisce al primo elemento in risoluzione: {extensions: ['', '.js', '.jsx']} nel file webpack.config.js.
Ajitesh

5

Questo errore di solito si verifica quando hai una versione in conflitto (angular js). Quindi il webpack non ha potuto avviare l'applicazione. Puoi semplicemente risolverlo rimuovendo il webpack e reinstallarlo.

npm uninstall webpack --save-dev
npm install webpack --save-dev

Riavvia la tua applicazione e tutto va bene.

Spero di poter aiutare qualcuno. Saluti


Ho avuto questo problema durante l'aggiornamento di un progetto a una versione più recente di Angular. La semplice reinstallazione di Webpack ha funzionato! Grazie!
Iván Pérez

3

Ho ricevuto lo stesso messaggio di errore quando ho introdotto webpack in un progetto che ho creato con npm init.

Invalid configuration object. Webpack has been initialised using a configuration object that does not match the API schema. - configuration.output.path: The provided value "dist/assets" is not an absolute path!

Ho ricominciato a usare il filo che mi ha risolto il problema:

brew update
brew install yarn
brew upgrade yarn
yarn init
yarn add webpack webpack-dev-server path
touch webpack.config.js
yarn add babel-loader babel-core babel-preset-es2015 babel-preset-react --dev
yarn add html-webpack-plugin
yarn start

Ho trovato utile il seguente collegamento: Configura un ambiente React usando webpack e Babel


Ho provato questo, tutto funziona bene tranne che ci sono alcuni avvertimenti ma quando faccio l'ultimo comando "inizio filato", mi dà un errore "Comando avvio non trovato", sai come risolvere questo problema? Grazie!
Tony Chen

2

Ho cambiato caricatori a regole nel webpack.config.jsfile di e aggiornato i pacchetti html-webpack-plugin, webpack, webpack-cli, webpack-dev-serveralla versione più recente, allora ha funzionato per me!


2

Ho avuto lo stesso problema e l'ho risolto apportando alcune modifiche al mio file web.config.js. Cordiali saluti, sto usando l'ultima versione di webpack e webpack-cli. Questo trucco mi ha appena salvato la giornata. Ho allegato l'esempio del mio file web.config.js prima e dopo la versione.

Prima:

module.exports = {
    resolve: {
        extensions: ['.js', '.jsx']
    },
    entry: './index.js',
    output: {
         filename: 'bundle.js'
    },
    module: {
        loaders : [
           { test: /\.js?/, loader: 'bable-loader', exclude: /node_modules/ }
        ]
    }
}

Dopo: ho appena sostituito i caricatori con le regole nell'oggetto modulo come puoi vedere nel mio frammento di codice.

module.exports = {
    resolve: {
        extensions: ['.js', '.jsx']
    },
    entry: './index.js',
    output: {
        filename: 'bundle.js'
    },
    module: {
        rules : [
            { test: /\.js?/, loader: 'bable-loader', exclude: /node_modules/ }
        ]
    }
}

Si spera, questo aiuterà qualcuno a sbarazzarsi di questo problema.


babel-loader, nonbable-loader
AntonAL

1

Questo errore si verifica quando utilizzo path.resolve (), per configurare le impostazioni di "ingresso" e "uscita". entry: path.resolve(__dirname + '/app.jsx'). Provaentry: __dirname + '/app.jsx'


1

Nel mio caso il problema era il nome della cartella in cui era contenuto il progetto, che aveva il segno "!" Tutto quello che ho fatto è stato rinominare la cartella e tutto era pronto.


1

Ho avuto lo stesso problema e, nel mio caso, tutto quello che dovevo fare era il buon vecchio

leggi il messaggio di errore ...

Il mio messaggio di errore diceva:

Oggetto di configurazione non valido. Webpack è stato inizializzato utilizzando un oggetto di configurazione che non corrisponde allo schema API. - configuration.entry dovrebbe essere uno di questi: function | oggetto {: stringa non vuota | [stringa non vuota]} | stringa non vuota | [stringa non vuota] -> I punti di ingresso della compilation. Dettagli: * configuration.entry dovrebbe essere un'istanza di funzione -> Una funzione che restituisce un oggetto di ingresso, una stringa di ingresso, un array di voce o una promessa a queste cose. * configuration.entry ['styles'] dovrebbe essere una stringa. -> La stringa viene risolta in un modulo che viene caricato all'avvio. *configuration.entry ['styles'] non deve contenere due volte l'elemento 'C: \ MojiFajlovi \ Faks \ 11Master \ 1Semestar \ UDD-UpravljanjeDigitalnimDokumentima \ Projekat \ nc-front \ node_modules \ bootstrap \ dist \ css \ bootstrap.min.css' .

Come diceva la riga del messaggio di errore in grassetto, ho appena aperto il angular.jsonfile e ho trovato stylesche assomiglia a questo:

"styles": [
      "./node_modules/bootstrap/dist/css/bootstrap.min.css",
      "src/styles.css",
      "node_modules/bootstrap/dist/css/bootstrap.min.css" <-- **marked line**
    ],

... quindi ho appena rimosso la linea contrassegnata ...

ed è andato tutto bene. :)


0

Ho lo stesso errore di te.

npm disinstalla webpack --save-dev

&

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

risolvilo!.



0

L'uso di una sintassi diversa (flag ...), può causare questo problema da una versione all'altra nel webpack (3,4,5 ...), devi leggere la nuova configurazione del webpack aggiornata e le funzionalità deprecate.


0

Per me ho dovuto cambiare:

cheap-module-eval-source-map

per:

eval-cheap-module-source-map

Una sfumatura da v4 a v5 .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.