अमान्य कॉन्फ़िगरेशन ऑब्जेक्ट। Webpack को एक कॉन्फ़िगरेशन ऑब्जेक्ट का उपयोग करके आरम्भ किया गया है जो API स्कीमा से मेल नहीं खाता है


103

मेरे पास एक ऑनलाइन पाठ्यक्रम से बनाया गया यह सरल हेलोवर्ल्ड रिएक्शन ऐप है, हालाँकि मुझे यह त्रुटि मिलती है:

अमान्य कॉन्फ़िगरेशन ऑब्जेक्ट। Webpack को एक कॉन्फ़िगरेशन ऑब्जेक्ट का उपयोग करके आरम्भ किया गया है जो API स्कीमा से मेल नहीं खाता है। - कॉन्फ़िगरेशन में एक अज्ञात संपत्ति है 'पोस्टस्कल्स'। ये गुण मान्य हैं: ऑब्जेक्ट {amd ?, bail ?, cache ?, संदर्भ ?, निर्भरताएं ?, devServer ?, devtool ?, एंट्री, एक्सटर्नल ?, लोडर ?, मॉड्यूल ?, नाम ?, नोड? आउटपुट । } टाइपो के लिए: कृपया उन्हें सही करें।
लोडर विकल्पों के लिए: वेबपैक 2 अब कॉन्फ़िगरेशन में कस्टम गुणों की अनुमति नहीं देता है। लोडर को मॉड्यूल.rules में लोडर विकल्पों के माध्यम से गुजरने की अनुमति देने के लिए अद्यतन किया जाना चाहिए। जब तक लोडर को अपडेट नहीं किया जाता है, तब तक लोडर को इन विकल्पों को पास करने के लिए लोडरऑफिसप्लसिन का उपयोग कर सकते हैं: प्लगइन्स: [नया वेबपैक। ...}})] - configuration.resolve में एक अज्ञात संपत्ति 'रूट' है। ये गुण मान्य हैं: ऑब्जेक्ट {alias ?, aliasFields?? CachePredicate ?, descriptionFiles ?, enforceExtension ?, enforceModuleExtension ?, एक्सटेंशन ?, fileSystem ?, mainFields; mainFiles ?, मॉड्यूलफ्लेक्स ?, मॉड्यूल ?, प्लगइन्स; रिसाल्वर ? असुरक्षित? useSyncFileSystemCalls? } - configuration.resolve.extensions [0] खाली नहीं होना चाहिए।

मेरी वेबपैक फ़ाइल है:

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

};

जवाबों:


27

मैं वास्तव में नहीं जानता कि क्या कारण हैं, लेकिन मैं इसे इस तरह से हल करता हूं।
पूरे प्रोजेक्ट को पुनर्स्थापित करें लेकिन याद रखें कि वेबपैक-देव-सर्वर को विश्व स्तर पर स्थापित किया जाना चाहिए।
मैं कुछ सर्वर त्रुटियों के माध्यम से चलता हूं जैसे कि वेबपैक कैंट पाया जा सकता है, इसलिए मैंने लिंक कमांड का उपयोग करके वेबपैक को लिंक किया।
आउटपुट में कुछ निरपेक्ष पथ मुद्दों को हल करना।

भक्ति में 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"
  }
}

बस वेबपैक-देव-सर्वर की स्थानीय स्थापना को हटाकर इसे विश्व स्तर पर स्थापित करना मेरे लिए यह तय है।
सैम

48
मुझे लगता है कि loadersविकल्प के साथ प्रतिस्थापित किया गया है rulesदेखने webpack.js.org/concepts/loaders
Olotin Temitope

@OlotinTemitope हाँ, धन्यवाद! इससे मेरी समस्या हल हो गई!
साइमन

41

बस "लोडर" से "नियम" को "webpack.config.js" में बदलें

क्योंकि लोडर का उपयोग वेबपैक 1 में किया जाता है, और वेबपैक 2 में नियम। आप देख सकते हैं कि मतभेद हैं


32

मैंने अपने रिज़ॉल्यूशन ऐरे से खाली स्ट्रिंग निकालकर इस मुद्दे को हल किया। वेबपैक की साइट पर संकल्प दस्तावेज देखें ।

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

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

2
अब और काम क्यों नहीं करता? वेबपैक के पुराने संस्करणों में मुझे हमेशा extensionsसरणी मान के पहले सूचकांक पर खाली स्ट्रिंग दिखाई देती है
guilima

25

नीचे दिए गए चरणों का प्रयास करें:

npm uninstall webpack --save-dev

के बाद

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

तब आपको फिर से गपशप करने में सक्षम होना चाहिए। मेरे लिए मुद्दा तय किया।


16

अपने जैसे लोगों के लिए, जिन्होंने हाल ही में शुरुआत की: loadersकीवर्ड को बदल दिया गया rules; हालांकि यह अभी भी लोडरों की अवधारणा का प्रतिनिधित्व करता है। तो मेरी webpack.config.js, एक प्रतिक्रिया एप्लिकेशन के लिए, इस प्रकार है:

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;

16

मुझे लगता है कि आपका वेबपैक संस्करण 2.2.1 है। मुझे लगता है कि आपको इस माइग्रेशन गाइड -> https://webpack.js.org/guides/migrating/ का उपयोग करना चाहिए

इसके अलावा, आप TypeSCript + Webpack 2 के इस उदाहरण का उपयोग कर सकते हैं ।


क्या होगा अगर यह अभी भी वेबपैक 3 के साथ एक मुद्दा है?
mjwrazor

9

Webpack.config.js में लोडर प्रतिस्थापित करते हैं: [..] नियमों के साथ: [..] यह मेरे लिए काम करता है।


9

वेबपैक की कॉन्फ़िगरेशन फ़ाइल वर्षों में बदल गई है (संभवतः प्रत्येक बड़ी रिलीज़ के साथ)। प्रश्न का उत्तर:

मुझे यह त्रुटि क्यों आती है

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

क्योंकि कॉन्फ़िगरेशन फ़ाइल उपयोग किए जा रहे वेबपैक के संस्करण से मेल नहीं खाती है।

स्वीकार किए गए उत्तर में यह और अन्य उत्तर नहीं दिए गए हैं , लेकिन यह स्पष्ट रूप से नहीं बताता है कि यह npm webpack@2.1.0-beta.22 स्थापित करें , बस "लोडर" से "नियमों" को "webpack.config.js" में बदलें ” , और यह । इसलिए मैं इस सवाल का जवाब देने का फैसला करता हूं।

वेबपैक को अनइंस्टॉल करना और पुनः स्थापित करना, या वेबपैक के वैश्विक संस्करण का उपयोग करना इस समस्या को ठीक नहीं करेगा। उपयोग की जा रही कॉन्फ़िगरेशन फ़ाइल के लिए वेबपैक के सही संस्करण का उपयोग करना महत्वपूर्ण है।

यदि यह समस्या एक वैश्विक संस्करण का उपयोग करते समय तय की गई थी, तो इसका मतलब है कि आपका वैश्विक संस्करण "पुराना" था और webpack.config.js फ़ाइल प्रारूप का उपयोग करते हुए आपका "पुराना" है, इसलिए वे मेल खाते हैं और वायोला चीजें अब काम करती हैं । मैं काम करने वाली चीजों के लिए हूं, लेकिन पाठकों को यह जानना चाहिए कि उन्होंने काम क्यों किया।

जब भी आपको एक वेबपैक कॉन्फिगरेशन मिलता है जो आपको लगता है कि आपकी समस्या को हल करने वाला है ... अपने आप से पूछें कि कॉन्फ़िगरेशन के लिए वेबपैक का कौन सा संस्करण है।

वेबपैक सीखने के लिए बहुत अच्छे संसाधन हैं। कुछ हैं:

  • वर्तमान में 4.x संस्करण पर वेबपैक कॉन्फ़िगरेशन का वर्णन करने वाली आधिकारिक वेबपैक वेबसाइट । हालांकि यह देखने के लिए एक शानदार संसाधन है कि वेबपैक को कैसे काम करना चाहिए, यह सीखने में हमेशा सबसे अच्छा नहीं होता है कि वेबपैक में 2 या 3 विकल्प एक समस्या को हल करने के लिए एक साथ कैसे काम करते हैं। लेकिन यह शुरू करने के लिए सबसे अच्छी जगह है क्योंकि यह आपको यह जानने के लिए मजबूर करता है कि आप किस वेबपैक का उपयोग कर रहे हैं। :-)
  • उदाहरण के लिए वेबपैक (v3?) - वेबपैक सीखने के लिए एक काटने के आकार का दृष्टिकोण लेता है, एक समस्या उठाता है और फिर यह दिखाता है कि इसे वेबपैक में कैसे हल किया जाए। मुझे यह तरीका पसंद है। दुर्भाग्य से यह वेबपैक 4 नहीं सिखा रहा है लेकिन फिर भी अच्छा है।

  • वेबपैक 4, बैबेल और रिएक्ट को स्क्रैच से सेट करना, पुनःप्रकाशित - यह रिएक्ट के लिए विशिष्ट है लेकिन अच्छा है यदि आप कई चीजें सीखना चाहते हैं जो एक प्रतिक्रिया सिंगल पेज ऐप बनाने के लिए आवश्यक हैं।

  • वेबपैक (v3) - कन्फ्यूजिंग पार्ट्स - अच्छा और बहुत सारी जमीन को कवर करता है। यह 10 अप्रैल, 2016 को दिनांकित है और इसमें webpack4 शामिल नहीं है, लेकिन शिक्षण के कई बिंदु सीखने के लिए मान्य या उपयोगी हैं।

उदाहरण के लिए webpack4 सीखने के लिए बहुत अधिक अच्छे संसाधन हैं, यदि आप दूसरों के बारे में जानते हैं तो कृपया टिप्पणी जोड़ें। उम्मीद है, भविष्य के वेबपैक लेख उपयोग किए जा रहे / बताए गए संस्करणों को बताएंगे।


9

इसके rulesबजाय यह काम कर रहा हैloaders

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

7

मेरे पास एक ही मुद्दा था और मैंने इसे नवीनतम npm संस्करण स्थापित करके हल किया:

npm install -g npm@latest

और फिर webpack.config.jsहल करने के लिए फ़ाइल बदलें

- configuration.resolve.extensions [0] खाली नहीं होना चाहिए।

अब संकल्प विस्तार जैसा दिखना चाहिए:

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

फिर दौड़ो npm start


इसने मेरे लिए काम किया। मेरे webpack.config.js फ़ाइल में, मेरे पास एक प्रविष्टि थी जैसे कि सीमाएँ: ['', '.js', '.jsx']। मैंने खाली आइटम '' को हटा दिया और यह काम कर गया। configuration.resolve.extensions [0] समाधान के तहत पहले आइटम को संदर्भित करता है: {एक्सटेंशन: ['', '.js', '.jsx']} webpack.config.js फ़ाइल में।
अजितेश

5

यह त्रुटि आमतौर पर तब होती है जब आपके पास परस्पर विरोधी संस्करण (कोणीय js) होते हैं। इसलिए वेबपैक एप्लिकेशन शुरू नहीं कर सका। आप बस इसे वेबपैक को हटाकर ठीक कर सकते हैं और इसे पुनर्स्थापित कर सकते हैं।

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

आपके एप्लिकेशन को पुनरारंभ करें और सब कुछ ठीक है।

मुझे उम्मीद है कि मैं किसी की मदद करने में सक्षम हूं। चियर्स


एंगुलर के नए संस्करण के लिए एक परियोजना को अपग्रेड करते समय मुझे यह समस्या थी। बस वेबपैक को पुनः स्थापित करने का काम किया! धन्यवाद!
Iván Pérez

3

मुझे उसी त्रुटि संदेश मिला जब मैंने 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!

मैंने यार्न का उपयोग शुरू कर दिया, जिसने मेरे लिए समस्या तय कर दी:

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

मुझे निम्न लिंक मददगार लगे: वेबपैक और बैबल का उपयोग करके एक रिएक्ट एनवायरनमेंट सेट करें


मैंने यह कोशिश की, कुछ चेतावनी के अलावा सभी ठीक काम कर रहे हैं, लेकिन जब मैं "यार्न स्टार्ट" की आखिरी तारीफ करता हूं, तो यह मुझे एक त्रुटि देता है "कमांड स्टार्ट नहीं मिली", क्या आप जानते हैं कि इसे कैसे ठीक किया जाए? धन्यवाद!
टोनी चेन

2

मैं बदल गया लोडर के लिए नियमों में webpack.config.jsफ़ाइल और संकुल अद्यतन html-webpack-plugin, webpack, webpack-cli, webpack-dev-serverनवीनतम संस्करण तो यह मेरे लिए काम किया है!


2

मेरे पास एक ही मुद्दा था और मैंने अपनी web.config.js फ़ाइल में कुछ बदलाव करके इसे हल किया। FYI करें मैं webpack और webpack-cli के नवीनतम संस्करण का उपयोग कर रहा हूं। इस ट्रिक से सिर्फ मेरा दिन बचा। मैंने संस्करण से पहले और बाद में मेरा web.config.js फ़ाइल का उदाहरण संलग्न किया है।

इससे पहले:

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

के बाद: मैं बस लोडर को मॉड्यूल ऑब्जेक्ट में नियमों में बदल दिया, जैसा कि आप मेरे कोड स्निपेट में देख सकते हैं।

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

उम्मीद है, इससे किसी को इस मुद्दे से छुटकारा पाने में मदद मिलेगी।


babel-loader, नहींbable-loader
एंटोनियल

1

यह त्रुटि तब होती है जब मैं 'एंट्री' और 'आउटपुट' सेटिंग सेट करने के लिए path.resolve () का उपयोग करता हूं। entry: path.resolve(__dirname + '/app.jsx')। कोशिश करोentry: __dirname + '/app.jsx'


1

मेरे मामले में समस्या उस फ़ोल्डर का नाम थी जहां परियोजना निहित थी, जिस पर हस्ताक्षर था "!" मैंने केवल फ़ोल्डर का नाम बदला और सब कुछ तैयार था।


1

मुझे भी यही समस्या थी, और मेरे मामले में, मुझे सिर्फ इतना करना था कि अच्छा राजभाषा था '

त्रुटि संदेश पढ़ें ...

मेरे त्रुटि संदेश ने कहा:

अमान्य कॉन्फ़िगरेशन ऑब्जेक्ट। Webpack को एक कॉन्फ़िगरेशन ऑब्जेक्ट का उपयोग करके आरम्भ किया गया है जो API स्कीमा से मेल नहीं खाता है। - configuration.entry इनमें से एक होना चाहिए: फ़ंक्शन | ऑब्जेक्ट {: गैर-रिक्त स्ट्रिंग | [गैर-रिक्त स्ट्रिंग]} | गैर-रिक्त स्ट्रिंग | [गैर-रिक्त स्ट्रिंग] -> संकलन का प्रवेश बिंदु। विवरण: * configuration.entry फ़ंक्शन का एक उदाहरण होना चाहिए -> एक एंट्री ऑब्जेक्ट, एक एंट्री स्ट्रिंग, एक एंट्री एरे या इन चीजों के लिए एक वादा लौटाने वाला फ़ंक्शन। * configuration.entry ['शैलियों'] एक स्ट्रिंग होना चाहिए। -> स्ट्रिंग को एक मॉड्यूल के लिए हल किया जाता है जो स्टार्टअप पर लोड होता है। *configuration.entry ['स्टाइल'] में आइटम नहीं होना चाहिए 'C: \ MojiFajlovi \ Faks \ 11Master \ 1Semestar \ UDD-UpravljanjeDigitalnimDokualima \ Projekat \ nc-front \ नोड_modules \ bootstrap \ distst \ cst \ bootstrap' ।

जैसा कि बोल्ड-एड एरर मैसेज लाइन ने कहा, मैंने अभी angular.jsonफाइल खोली है और stylesइस तरह दिखता है:

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

... तो मैंने सिर्फ चिह्नित लाइन को हटा दिया ...

और यह सब अच्छा हुआ। :)


0

मेरी आपसे एक ही त्रुटि है।

npm वेबपैक की स्थापना रद्द करें - सेव-देव

और

npm स्थापित करें webpack@2.1.0-beta.22 --save-dev

इसे हल करो!।


0

मेरे पास वेबपैक संस्करण 3 था इसलिए मैंने वर्तमान https://www.npmjs.com/package/webpack-dev-server "संस्करणों" पृष्ठ के अनुसार वेबपैक-देव-सर्वर संस्करण 2.11.5 स्थापित किया । और फिर समस्या दूर हो गई थी।

यहां छवि विवरण दर्ज करें


0

विभिन्न सिंटैक्स (झंडे ...) का उपयोग करके, वेबपैक में संस्करण से दूसरे तक यह समस्या पैदा कर सकता है (3,4,5 ...), आपको नए वेबपैक कॉन्फ़िगरेशन अद्यतन और पदावनत विशेषताओं को पढ़ना होगा।


0

मेरे लिए मुझे बदलना पड़ा:

cheap-module-eval-source-map

सेवा:

eval-cheap-module-source-map

A v4 से v5 की बारीकियाँ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.