Geçersiz yapılandırma nesnesi. Web paketi, API şemasıyla eşleşmeyen bir yapılandırma nesnesi kullanılarak başlatıldı


92

Çevrimiçi bir kurstan oluşturulmuş bu basit helloworld tepki uygulamasına sahibim, ancak şu hatayı alıyorum:

Geçersiz yapılandırma nesnesi. Web paketi, API şemasıyla eşleşmeyen bir yapılandırma nesnesi kullanılarak başlatıldı. - yapılandırma, bilinmeyen bir 'postcss' özelliğine sahip. Bu özellikler geçerlidir: nesne {amd ?, kefalet ?, önbellek ?, bağlam ?, bağımlılıklar ?, devServer ?, devtool ?, giriş, dışsallar ?, yükleyici ?, modül ?, isim ?, düğüm ?, çıktı ?, performans? , eklentiler ?, profil ?, recordsInputPath ?, recordsO utputPath ?, recordsPath ?, resol ?, resolLoader ?, istatistikler ?, target ?, watch ?, watchOptions? } Yazım hataları için: lütfen düzeltin.
Yükleyici seçenekleri için: webpack 2 artık yapılandırmada özel özelliklere izin vermemektedir. Module.rules'deki yükleyici seçenekleri aracılığıyla geçiş seçeneklerine izin vermek için yükleyiciler güncellenmelidir. Yükleyiciler güncellenene kadar, bu seçenekleri yükleyiciye geçirmek için LoaderOptionsPlugin kullanılabilir: plugins: [new webpack.LoaderOptionsPlugin ({// test: /.xxx$/, // bunu yalnızca bazı modül seçenekleri için uygulayabilir: {postcss: ...}})] - configuration.resolve bilinmeyen bir 'root' özelliğine sahip. Bu özellikler geçerlidir: object {alias ?, aliasFields ?, cachePredicate ?, descriptionFiles ?, forcedExtension ?, forcedModuleExtension ?, extensions ?, fileSystem ?, mainFields ?, mainFiles ?, moduleExtensions ?, modüller ?, eklentiler?, Resolver ?, symlinks ?, güvensiz Önbellek? useSyncFileSystemCalls? } - configuration.resolve.extensions [0] boş bırakılmamalıdır.

Web paketi dosyam:

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

};

Yanıtlar:


25

Buna neyin sebep olduğunu tam olarak bilmiyorum ama bu şekilde çözüyorum.
Tüm projeyi yeniden yükleyin, ancak webpack-dev-server'ın global olarak yüklenmesi gerektiğini unutmayın.
Web paketi gibi bazı sunucu hatalarını gözden geçiriyorum, bu yüzden Webpack'i link komutunu kullanarak bağladım.
Çıktıda Bazı mutlak yol sorunlarını çözme.

DevServer'da 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"
  }
}

sadece webpack-dev-server'ın yerel kurulumunu kaldırmak ve onu global olarak kurmak bunu benim için düzeltti.
Sam

47
Bence loadersseçenek ile değiştirilmiştir rulesbkz webpack.js.org/concepts/loaders
Olotin Temitope

@OlotinTemitope Evet, teşekkürler! Bu benim sorunumu çözdü!
Simon

39

"Webpack.config.js" içinde "yükleyiciler" yerine "kurallar" arasında geçiş yapmanız yeterlidir.

Çünkü Webpack 1'de yükleyiciler ve Webpack2'de kurallar kullanılır. Farklılıklar olduğunu görebilirsiniz .


32

Çözüm dizimden boş dizeyi kaldırarak bu sorunu çözdüm. Web paketinin sitesindeki çözüm belgelerine bakın .

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

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

2
Neden artık çalışmıyor? Web paketinin eski sürümlerinde boş dizeyi her zaman extensionsdizi değerinin ilk dizininde
görüyorum

25

Aşağıdaki adımları deneyin:

npm uninstall webpack --save-dev

bunu takiben

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

O zaman tekrar yudumlamalısın. Benim için sorunu çözdü.


16

Son zamanlarda başlayan benim gibi insanlar için: loadersAnahtar kelime olduğu değiştirilir ile rules; hala yükleyici konseptini temsil etse de. Yani webpack.config.js, bir React uygulaması için aşağıdaki gibi:

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

Webpack.config.js'de yükleyicileri değiştirin: [..] kurallarla: [..] Benim için çalıştı.


9

İş rulesyerine kullanıyorloaders

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

8

Webpack'in yapılandırma dosyası yıllar içinde değişmiştir (muhtemelen her büyük sürümde). Sorunun cevabı:

Neden bu hatayı alıyorum

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

çünkü yapılandırma dosyası kullanılan web paketinin sürümüyle eşleşmiyor.

Kabul edilen yanıt bunu belirtmiyor ve diğer yanıtlar bunu ima ediyor ancak açıkça belirtmeyin npm install webpack@2.1.0-beta.22 , Sadece " webpack.config.js'deki " yükleyicilerden "kurallara" değiştirin " ve bu . Bu yüzden bu soruya cevabımı vermeye karar verdim.

Web paketini kaldırıp yeniden yüklemek veya web paketinin genel sürümünü kullanmak bu sorunu çözmeyecektir. Kullanılan yapılandırma dosyası için doğru web paketi sürümünü kullanmak önemli olan şeydir.

Bu sorun genel bir sürüm kullanılırken giderildiyse, muhtemelen genel sürümünüzün "eski" olduğu ve kullandığınız webpack.config.js dosya biçiminin "eski" olduğu anlamına gelir, bu nedenle bunlar eşleşir ve artık işler çalışır . Ben her şeyin işe yaramasından yanayım, ancak okuyucuların neden çalıştıklarını bilmelerini istiyorum.

Sorununuzu çözeceğini umduğunuz bir web paketi yapılandırması aldığınızda ... kendinize yapılandırmanın hangi web paketi sürümü için olduğunu sorun.

Web paketini öğrenmek için birçok iyi kaynak var. Bazıları:

Örneğin webpack4'ü öğrenmek için çok daha fazla iyi kaynak var, lütfen başkalarını biliyorsanız yorum ekleyin. Umarım, gelecekteki web paketi makaleleri kullanılan / açıklanan sürümleri belirtecektir.


7

Aynı sorunu yaşadım ve en son npm sürümünü yükleyerek çözdüm:

npm install -g npm@latest

ve sonra webpack.config.jsçözülecek dosyayı değiştirin

- configuration.resolve.extensions [0] boş bırakılmamalıdır.

şimdi çözüm uzantısı şu şekilde görünmelidir:

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

sonra koş npm start.


Bu benim için çalıştı. Webpack.config.js dosyamda, uzantılar gibi bir girdi vardı: ['', '.js', '.jsx']. Boş öğeyi kaldırdım '' ve işe yaradı. configuration.resolve.extensions [0], çözümleme altındaki ilk öğeyi ifade eder: webpack.config.js dosyasındaki {uzantılar: ['', '.js', '.jsx']}.
Ajitesh

5

Bu hata genellikle çakışan sürümünüz (açısal js) olduğunda ortaya çıkar. Bu yüzden web paketi uygulamayı başlatamadı. Web paketini kaldırıp yeniden yükleyerek basitçe düzeltebilirsiniz.

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

Uygulamanızı yeniden başlatın ve her şey yolunda.

Umarım birine yardım edebilirim. Şerefe


Bir projeyi Angular'ın daha yeni bir sürümüne yükseltirken bu sorunu yaşadım. Basitçe Webpack'i yeniden yüklemek işe yaradı! Teşekkürler!
Iván Pérez

3

Npm init ile oluşturduğum bir projeye web paketini tanıtırken aynı hata mesajını aldım.

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!

Benim için sorunu çözen ipliği kullanmaya başladım:

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

Aşağıdaki bağlantıyı yararlı buldum: Webpack ve Babel kullanarak bir React Ortamı Kurun


Bunu denedim, bazı uyarılar dışında hepsi iyi çalışıyor ama son "iplik başlangıcı" komutunu yaptığımda, bana "Komut başlat bulunamadı" hatası veriyor, bunu nasıl düzelteceğinizi biliyor musunuz? Teşekkürler!
Tony Chen

2

Değiştim yükleyiciler için kurallar içinde webpack.config.jsdosya ve paketler güncellenmiş html-webpack-plugin, webpack, webpack-cli, webpack-dev-serverbu benim için çalıştı sonra en son sürüme!


2

Ben de aynı sorunu yaşadım ve web.config.js dosyamda bazı değişiklikler yaparak bu sorunu çözdüm. Bilginize webpack ve webpack-cli'nin en son sürümünü kullanıyorum. Bu numara günümü kurtardı. Web.config.js dosyamın örneğini sürümden önce ve sonra ekledim.

Önce:

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

Sonra: Ben sadece yerini yükleyiciler için kurallar benim kod parçacığı de görebileceğiniz gibi modül nesnesi.

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

Umarım, Bu, birinin bu sorundan kurtulmasına yardımcı olacaktır.


babel-loader, değilbable-loader
AntonAL

1

Bu hata, 'input' ve 'output' ayarlarını yapmak için path.resolve () kullandığımda ortaya çıkıyor. entry: path.resolve(__dirname + '/app.jsx'). Sadece deneentry: __dirname + '/app.jsx'


1

Benim durumumda sorun, "!" İşaretinin bulunduğu, projenin bulunduğu klasörün adıydı. Tek yaptığım klasörü yeniden adlandırmaktı ve her şey hazırdı.


1

Aynı sorunu yaşadım ve benim durumumda tek yapmam gereken iyi ol

hata mesajını okuyun ...

Hata mesajım şöyle dedi:

Geçersiz yapılandırma nesnesi. Web paketi, API şemasıyla eşleşmeyen bir yapılandırma nesnesi kullanılarak başlatıldı. - configuration.entry şunlardan biri olmalıdır: function | nesne {: boş olmayan dize | [boş olmayan dize]} | boş olmayan dize | [boş olmayan dize] -> Derlemenin giriş noktaları. Ayrıntılar: * configuration.entry bir işlev örneği olmalıdır -> Bir girdi nesnesi, bir girdi dizesi, bir girdi dizisi veya bunlara bir vaat döndüren bir İşlev. * configuration.entry ['stiller'] bir dize olmalıdır. -> Dizgi, başlangıçta yüklenen bir modüle çözümlenir. *configuration.entry ['styles'] iki kez 'C: \ MojiFajlovi \ Faks \ 11Master \ 1Semestar \ UDD-UpravljanjeDigitalnimDokumentima \ Projekat \ nc-front \ node_modules \ bootstrap \ dist \ css \ bootstrap.min.css' öğesini içermemelidir .

Kalın yazılmış hata mesajı satırının dediği gibi, angular.jsondosyayı yeni açtım ve stylesşöyle göründüğünü buldum :

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

... bu yüzden işaretli satırı kaldırdım ...

ve her şey yolunda gitti. :)


0

Ben de seninle aynı hataya sahibim.

npm web paketini kaldır --save-dev

&

npm webpack@2.1.0-beta.22'yi yükle --save-dev

çöz onu!.



0

Farklı sözdizimi (bayraklar ...) kullanmak, web paketinde (3,4,5 ...) sürümden diğerine bu soruna neden olabilir, yeni web paketi yapılandırmasının güncellenmiş ve kullanımdan kaldırılmış özelliklerini okumanız gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.