วัตถุการกำหนดค่าไม่ถูกต้อง Webpack เริ่มต้นโดยใช้ออบเจ็กต์การกำหนดค่าที่ไม่ตรงกับสคีมา API


102

ฉันมีแอปตอบกลับ helloworld ง่ายๆที่สร้างขึ้นจากหลักสูตรออนไลน์ แต่ฉันได้รับข้อผิดพลาดนี้:

วัตถุการกำหนดค่าไม่ถูกต้อง Webpack เริ่มต้นโดยใช้ออบเจ็กต์การกำหนดค่าที่ไม่ตรงกับสคีมา API - การกำหนดค่ามีคุณสมบัติที่ไม่รู้จัก 'postcss' คุณสมบัติเหล่านี้ถูกต้อง: object {amd ?, bail ?, cache ?, context ?, dependencies ?, devServer ?, devtool ?, entry, externals ?, loader ?, module ?, name ?, node ?, output ?, performance? , plugins?, profile ?, recordsInputPath ?, recordsO utputPath ?, recordsPath?, edit?, fixLoader?, stats ?, target ?, watch ?, watchOptions? } สำหรับการพิมพ์ผิด: โปรดแก้ไข
สำหรับตัวเลือกตัวโหลด: webpack 2 ไม่อนุญาตคุณสมบัติที่กำหนดเองในการกำหนดค่าอีกต่อไป ควรอัปเดตรถตักเพื่ออนุญาตตัวเลือกการส่งผ่านตัวเลือกตัวโหลดใน module.rules จนกว่ารถตักจะได้รับการอัปเดตคุณสามารถใช้ LoaderOptionsPlugin เพื่อส่งผ่านตัวเลือกเหล่านี้ไปยังตัวโหลด: plugins: [new webpack.LoaderOptionsPlugin ({// test: /.xxx$/, // อาจใช้ได้เฉพาะกับตัวเลือกบางโมดูลเท่านั้น: {postcss: ... }})] - configuration.resolve มีคุณสมบัติที่ไม่รู้จัก "root" คุณสมบัติเหล่านี้ถูกต้อง: object {alias ?, aliasFields ?, cachePredicate ?, descriptionFiles ?, enforceExtension ?, enforceModuleExtension ?, extensions ?, fileSystem ?, mainFields ?, mainFiles ?, moduleExtensions ?, module?, plugins?, resolver ?, symlinks ?, unsafeCache?, useSyncFileSystemCalls? } - configuration.resolve.extensions [0] ต้องไม่ว่างเปล่า

ไฟล์ 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'
            }
        }
    }

};

คำตอบ:


27

ฉันไม่รู้ว่าอะไรเป็นสาเหตุ แต่ฉันแก้ด้วยวิธีนี้
ติดตั้งโครงการทั้งหมดอีกครั้ง แต่จำไว้ว่าต้องติดตั้ง webpack-dev-server ทั่วโลก
ฉันเดินผ่านข้อผิดพลาดของเซิร์ฟเวอร์บางอย่างเช่นไม่พบ webpack ดังนั้นฉันจึงเชื่อมโยง Webpack โดยใช้คำสั่งลิงก์
ในผลลัพธ์การแก้ไขปัญหาเส้นทางสัมบูรณ์บางอย่าง

ใน 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 ในเครื่องและติดตั้งทั่วโลกก็แก้ไขสิ่งนี้ให้ฉันได้
แซม

48
ฉันคิดว่าloadersตัวเลือกถูกแทนที่ด้วยrulesดูwebpack.js.org/concepts/loaders
Olotin Temitope

@OlotinTemitope ใช่ขอบคุณ! นี่ช่วยแก้ปัญหาของฉันได้!
Simon

41

เพียงแค่เปลี่ยนจาก "รถตัก" เป็น "กฎ" ใน "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
webpack

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;

16

ฉันเดาว่าเวอร์ชัน webpack ของคุณคือ 2.2.1 ฉันคิดว่าคุณควรใช้คู่มือการย้ายข้อมูลนี้ -> https://webpack.js.org/guides/migrating/

นอกจากนี้คุณสามารถใช้ตัวอย่างนี้typescript + Webpack 2


จะเกิดอะไรขึ้นหากปัญหานี้ยังคงเป็นปัญหากับ webpack 3
mjwrazor


9

ไฟล์การกำหนดค่าของ Webpack มีการเปลี่ยนแปลงในช่วงหลายปีที่ผ่านมา คำตอบสำหรับคำถาม:

เหตุใดฉันจึงได้รับข้อผิดพลาดนี้

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

เป็นเพราะไฟล์กำหนดค่าไม่ตรงกับเวอร์ชันของ webpack ที่ใช้อยู่

คำตอบที่ได้รับการยอมรับไม่ได้ระบุนี้และคำตอบอื่น ๆ พาดพิงถึงนี้ แต่ไม่ได้ระบุอย่างชัดเจนNPM ติดตั้ง webpack@2.1.0-beta.22 , การเปลี่ยนแปลงเพียงแค่จาก "รถตัก" เป็น "กฎ" ใน "webpack.config.js "และนี่นี้ดังนั้นฉันจึงตัดสินใจที่จะตอบคำถามนี้

การถอนการติดตั้งและติดตั้ง webpack ใหม่หรือการใช้ webpack เวอร์ชันสากลจะไม่สามารถแก้ไขปัญหานี้ได้ การใช้ webpack เวอร์ชันที่ถูกต้องสำหรับไฟล์คอนฟิกูเรชันที่ใช้เป็นสิ่งสำคัญ

หากปัญหานี้ได้รับการแก้ไขเมื่อใช้เวอร์ชันสากลอาจหมายความว่าเวอร์ชันสากลของคุณเป็น "เก่า" และรูปแบบไฟล์ webpack.config.js ที่คุณใช้เป็น "เก่า" จึงตรงกับวิโอลาสิ่งที่งานได้สิ่งที่ตอนนี้ทำงานฉันทุกอย่างทำงานได้ดี แต่ต้องการให้ผู้อ่านรู้ว่าทำไมพวกเขาถึงได้ผล

เมื่อใดก็ตามที่คุณได้รับการกำหนดค่า webpack ที่คุณหวังว่าจะแก้ปัญหาของคุณได้ ... ถามตัวเองว่าการกำหนดค่า webpack เป็นเวอร์ชันใด

มีแหล่งข้อมูลดีๆมากมายสำหรับการเรียนรู้ webpack บางสิ่งเป็น:

  • เว็บไซต์อย่างเป็นทางการ Webpack อธิบายการกำหนดค่า webpack ที่ปัจจุบันอยู่ที่รุ่น 4.x แม้ว่านี่จะเป็นแหล่งข้อมูลที่ยอดเยี่ยมสำหรับการค้นหาว่า Webpack ควรทำงานอย่างไร แต่ก็ไม่ใช่วิธีที่ดีที่สุดในการเรียนรู้ว่า 2 หรือ 3 ตัวเลือกใน webpack ทำงานร่วมกันเพื่อแก้ปัญหา แต่เป็นจุดเริ่มต้นที่ดีที่สุดเพราะบังคับให้คุณรู้ว่าคุณใช้ webpack เวอร์ชันใดอยู่ :-)
  • Webpack (v3?) ตามตัวอย่าง - ใช้แนวทางขนาดเล็กสำหรับการเรียนรู้ webpack เลือกปัญหาจากนั้นแสดงวิธีแก้ไขใน webpack ฉันชอบแนวทางนี้ น่าเสียดายที่ไม่ได้สอน webpack 4 แต่ก็ยังดีอยู่

  • การตั้งค่า Webpack4, Babel และ React ตั้งแต่เริ่มต้นกลับมาแล้ว - นี่เป็นเรื่องเฉพาะสำหรับ React แต่ดีถ้าคุณต้องการเรียนรู้หลายสิ่งที่จำเป็นในการสร้างแอปหน้าเดียวตอบสนอง

  • Webpack (v3) - The Confusing Parts - ดีและครอบคลุมพื้นที่มาก เป็นวันที่ 10 เมษายน 2016 และไม่ครอบคลุมถึง webpack4 แต่หลาย ๆ ประเด็นการสอนนั้นใช้ได้หรือมีประโยชน์ในการเรียนรู้

มีแหล่งข้อมูลที่ดีมากมายสำหรับการเรียนรู้ webpack4 ตามตัวอย่างโปรดเพิ่มความคิดเห็นหากคุณรู้จักผู้อื่น หวังว่าบทความของ webpack ในอนาคตจะระบุเวอร์ชันที่ใช้ / อธิบาย



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] หมายถึงรายการแรกภายใต้การแก้ไข: {extensions: ['', '.js', '.jsx']} ในไฟล์ webpack.config.js
Ajitesh

5

ข้อผิดพลาดนี้มักเกิดขึ้นเมื่อคุณมีเวอร์ชันที่ขัดแย้งกัน (angular js) ดังนั้น Webpack จึงไม่สามารถเริ่มแอปพลิเคชันได้ คุณสามารถแก้ไขได้โดยการลบ webpack และติดตั้งใหม่

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

รีสตาร์ทแอปพลิเคชันของคุณและทุกอย่างเรียบร้อยดี

ฉันหวังว่าจะสามารถช่วยใครสักคนได้ ไชโย


ฉันมีปัญหานี้ขณะอัปเกรดโครงการเป็น Angular เวอร์ชันใหม่กว่า เพียงแค่ติดตั้ง Webpack ใหม่ก็ใช้ได้! ขอบคุณ!
IvánPé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

ฉันพบว่าลิงค์ต่อไปนี้มีประโยชน์: ตั้งค่าสภาพแวดล้อมการตอบสนองโดยใช้ 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 ['styles'] ควรเป็นสตริง -> สตริงได้รับการแก้ไขเป็นโมดูลที่โหลดเมื่อเริ่มต้น *configuration.entry ['styles'] ไม่ควรมีรายการ '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 ถอนการติดตั้ง webpack --save-dev

&

npm ติดตั้ง webpack@2.1.0-beta.22 --save-dev

แก้ได้!.



0

การใช้ไวยากรณ์ที่แตกต่างกัน (แฟล็ก ... ) อาจทำให้เกิดปัญหานี้จากเวอร์ชันไปยังอีกเวอร์ชันหนึ่งใน webpack (3,4,5 ...


0

สำหรับฉันฉันต้องเปลี่ยน:

cheap-module-eval-source-map

ถึง:

eval-cheap-module-source-map

v4เพื่อv5แตกต่างกันนิดหน่อย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.