Недійсний об'єкт конфігурації. Webpack ініціалізовано за допомогою об'єкта конфігурації, який не відповідає схемі API


91

У мене є ця проста програма для реагування helloworld, створена з онлайн-курсу, однак я отримую таку помилку:

Недійсний об'єкт конфігурації. Webpack ініціалізовано за допомогою об'єкта конфігурації, який не відповідає схемі API. - конфігурація має невідому властивість 'postcss'. Ці властивості дійсні: об'єкт {amd ?, bail ?, кеш ?, контекст ?, залежності ?, devServer ?, devtool ?, запис, зовнішні дані ?, завантажувач ?, модуль ?, ім'я ?, вузол ?, вихід ?, продуктивність? , плагіни ?, профіль ?, recordsInputPath ?, recordsO utputPath ?, recordsPath ?, вирішити ?, resolLoader ?, stats ?, target ?, watch ?, watchOptions? } Для друкарських помилок: будь ласка, виправте їх.
Для опцій завантажувача: webpack 2 більше не дозволяє настроювати власні властивості. Завантажувачі слід оновити, щоб дозволити параметри передачі через опції завантажувача в module.rules. Поки завантажувачі не оновлюються, можна використовувати LoaderOptionsPlugin для передачі цих параметрів loader: plugins: [new webpack.LoaderOptionsPlugin ({// test: /.xxx$/, // може застосовувати це лише для деяких параметрів модулів: {postcss: ...}})] - config.resolve має невідому властивість 'root'. Ці властивості є дійсними: об'єкт {псевдонім ?, aliasFields ?, cachePredicate ?, опис файлів ?, принудитиЕкстензія ?, принудитиМодульЕкстензія ?, розширення ?, файлова система ?, основнеполе? ?, unsafeCache ?, useSyncFileSystemCalls? } - config.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'
            }
        }
    }

};

Відповіді:


25

Я точно не знаю, що це спричиняє, але я вирішую це таким чином.
Переінсталюйте весь проект, але пам’ятайте, що webpack-dev-сервер повинен бути встановлений у всьому світі.
Я переглядаю деякі помилки сервера, такі як webpack неможливо знайти, тому я зв’язав Webpack за допомогою команди link.
На виході Вирішення деяких проблем абсолютного шляху.

У 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"
  }
}

просто видаливши локальну установку webpack-dev-server та встановивши її глобально, це виправлено для мене.
Сем

47
Думаю, цю loadersопцію замінено на rulesдив. Webpack.js.org/concepts/loaders
Олотін Темітопе

@OlotinTemitope Так, дякую! Це вирішує мою проблему!
Саймон

39

Просто перейдіть з "навантажувачів" на "правила" у "webpack.config.js"

Оскільки навантажувачі використовуються в Webpack 1, а правила в Webpack2. Ви бачите, що є відмінності .


32

Я вирішив цю проблему, видаливши порожній рядок зі свого масиву вирішення. Ознайомтеся з документацією щодо вирішення проблем на веб-сайті webpack .

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

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

2
Чому більше не працює? У старих версіях веб-пакета я завжди бачу порожній рядок при першому індексі extensionsзначення масиву
Гліма

25

Спробуйте наступні кроки:

npm uninstall webpack --save-dev

слідом за ним

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

Тоді ви зможете знову ковтнути. Виправлено проблему для мене.


16

Для таких людей, як я, які нещодавно почали: loadersКлючове слово замінено на rules; навіть незважаючи на те, що він все ще представляє концепцію навантажувачів. Отже webpack.config.js, для програми React такий:

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 замініть завантажувачі: [..] правилами: [..] Це спрацювало для мене.


9

Це працює, rulesа неloaders

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

8

Файл конфігурації Webpack змінювався протягом багатьох років (ймовірно, з кожним основним випуском). Відповідь на питання:

Чому я отримую цю помилку

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

тому, що файл конфігурації не відповідає версії веб-пакета, що використовується.

У прийнятій відповіді цього не сказано , а інші відповіді на це натякають, але не чітко заявляйте. Npm install webpack@2.1.0-beta.22 , Просто перейдіть із "loaders" на "rules" у "webpack.config.js " , і це . Тому я вирішую надати свою відповідь на це питання.

Видалення та повторна установка webpack або використання глобальної версії webpack не вирішить цю проблему. Важливим є використання правильної версії webpack для використовуваного конфігураційного файлу.

Якщо ця проблема була виправлена ​​під час використання глобальної версії, це, ймовірно, означає, що ваша глобальна версія була "старою", а формат файлу webpack.config.js, який ви використовуєте, був "старим", тому вони збігаються і речі віоли зараз працюють . Я все за те, що працює, але хочу, щоб читачі знали, чому вони працювали.

Щоразу, коли ви отримуєте конфігурацію веб-пакета, яка, як ви сподіваєтесь, вирішить вашу проблему ... запитайте себе, для якої версії веб-пакета призначена конфігурація.

Є багато хороших ресурсів для вивчення webpack. Деякі з них:

  • Офіційний сайт Webpack описує конфігурацію WebPack, в даний час у версії 4.х . Хоча це чудовий ресурс для вивчення того, як повинен працювати webpack, не завжди найкраще вивчити, як 2 або 3 варіанти в webpack працюють разом для вирішення проблеми. Але це найкраще місце для початку, оскільки воно змушує вас знати, яку версію веб-пакета ви використовуєте. :-)
  • Webpack (v3?) На прикладі - використовує підхід для вивчення webpack, вибираючи проблему та показуючи, як її вирішити у webpack. Мені подобається такий підхід. На жаль, це не навчає webpack 4, але все ще добре.

  • Налаштування Webpack4, Babel і React з нуля, переглянуте - Це специфічно для React, але добре, якщо ви хочете дізнатися багато речей, необхідних для створення односторінкової програми для реагування.

  • Webpack (v3) - Заплутані частини - Хороший і охоплює багато місця. Він датований 10 квітня 2016 року і не охоплює webpack4, але багато навчальних пунктів є дійсними чи корисними для вивчення.

Є набагато більше хороших ресурсів для вивчення webpack4, наприклад, будь ласка, додайте коментарі, якщо вам відомо про інших. Сподіваємось, у майбутніх статтях веб-пакета будуть вказані версії, які використовуються / пояснюються.


7

У мене була та сама проблема, і я вирішив її, встановивши останню версію npm:

npm install -g npm@latest

а потім змініть webpack.config.jsфайл для вирішення

- config.resolve.extensions [0] не повинен бути порожнім.

тепер вирішення розширення повинно виглядати так:

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

то біжи npm start.


Це спрацювало для мене. У моєму файлі webpack.config.js у мене був запис, такий як розширення: ['', '.js', '.jsx']. Я видалив порожній елемент '', і він спрацював. configuration.resolve.extensions [0] відноситься до першого елемента, що вирішується: {extension: ['', '.js', '.jsx']} у файлі webpack.config.js.
Аджітеш,

5

Ця помилка зазвичай трапляється, коли у вас конфліктна версія (angular js). Отже, веб-пакет не зміг запустити програму. Ви можете просто виправити це, видаливши веб-пакет і встановити заново.

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

Перезапустіть свою програму, і все в порядку.

Я сподіваюся, що зможу комусь допомогти. Ура


У мене виникла ця проблема під час оновлення проекту до новішої версії Angular. Просто перевстановлення Webpack спрацювало! Дякую!
Iván Pérez

3

Я отримав те саме повідомлення про помилку при введенні webpack у проект, який я створив за допомогою 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

Я знайшов таке посилання корисним: Налаштування середовища React за допомогою webpack та Babel


Я спробував це, все працює нормально, за винятком деяких попереджень, але коли я роблю останню оцінку "запуск пряжі", це видає мені помилку "Команду запуску не знайдено", чи знаєте ви, як це виправити? Дякую!
Tony Chen

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
AntonAL

1

Ця помилка виникає у мене, коли я використовую path.resolve () для налаштування параметрів "введення" та "виведення". entry: path.resolve(__dirname + '/app.jsx'). Просто спробуйтеentry: __dirname + '/app.jsx'


1

У моєму випадку проблема полягала в назві папки, в якій містився проект, яка мала знак "!" Все, що я зробив, - це перейменувати папку, і все було готово.


1

У мене була та сама проблема, і в моєму випадку все, що мені потрібно було зробити, це добро

прочитати повідомлення про помилку ...

У моєму повідомленні про помилку написано:

Недійсний об'єкт конфігурації. Webpack ініціалізовано за допомогою об'єкта конфігурації, який не відповідає схемі API. - configuration.entry має бути одним із таких: function | об'єкт {: непустий рядок | [непустий рядок]} | непустий рядок | [непустий рядок] -> Точка входу компіляції. Детально: * configuration.entry має бути екземпляром функції -> Функція, що повертає об’єкт запису, рядок запису, масив запису або обіцянку цим речам. * configuration.entry ['стилі'] має бути рядком. -> Рядок вирішено до модуля, який завантажується під час запуску. *configuration.entry ['стилі'] не повинен містити елемент 'C: \ MojiFajlovi \ Faks \ 11Master \ 1Semestar \ UDD-UpravljanjeDigitalnimDokumentima \ Projekat \ nc-front \ node_modules \ bootstrap \ dist \ css \ bootstrap.min.css' двічі .

Як зазначено в жирному рядку повідомлення про помилку, я просто відкрив 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 видалити веб-пакет --save-dev

&

npm встановити webpack@2.1.0-beta.22 --save-dev

виріши це!.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.