Đối tượng cấu hình không hợp lệ. Webpack đã được khởi chạy bằng đối tượng cấu hình không khớp với lược đồ API


93

Tôi có ứng dụng phản ứng helloworld đơn giản này được tạo từ một khóa học trực tuyến, tuy nhiên tôi gặp lỗi này:

Đối tượng cấu hình không hợp lệ. Webpack đã được khởi tạo bằng đối tượng cấu hình không khớp với lược đồ API. - cấu hình có thuộc tính không xác định 'postcss'. Các thuộc tính này hợp lệ: object {amd ?, bail ?, cache ?, context ?, dependencies ?, devServer ?, devtool ?, entry, externals ?, loader ?, module ?, name ?, node ?, output ?, performance? , plugins ?, hồ sơ ?, recordInputPath ?, recordO utputPath ?, recordsPath ?, giải quyết ?, giải quyếtLoader ?, thống kê ?, target ?, watch ?, watchOptions? } Đối với lỗi chính tả: vui lòng sửa chúng.
Đối với các tùy chọn trình tải: webpack 2 không còn cho phép các thuộc tính tùy chỉnh trong cấu hình. Bộ tải phải được cập nhật để cho phép các tùy chọn chuyển qua tùy chọn bộ tải trong module.rules. Cho đến khi các trình tải được cập nhật, người ta có thể sử dụng LoaderOptionsPlugin để chuyển các tùy chọn này cho trình tải: plugins: [new webpack.LoaderOptionsPlugin ({// test: /.xxx$/, // chỉ có thể áp dụng điều này cho một số tùy chọn mô-đun: {postcss: ...}})] - configuration.resolve có thuộc tính "root" không xác định. Các thuộc tính này là hợp lệ: object {alias ?, aliasFields ?, cachePredicate ?, descriptionFiles ?, thi hànhExtension ?, cưỡng chếModuleExtension ?, phần mở rộng ?, fileSystem ?, mainFields ?, mainFiles ?, moduleExtensions ?, mô-đun ?, plugin ?, giải quyết ?, liên kết tượng trưng ?, Bộ nhớ đệm không an toàn ?, useSyncFileSystemCalls? } - configuration.resolve.extensions [0] không được để trống.

Tệp webpack của tôi là:

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

};

Câu trả lời:


26

Tôi không biết chính xác nguyên nhân gây ra điều đó, nhưng tôi giải quyết nó theo cách này.
Cài đặt lại toàn bộ dự án nhưng hãy nhớ rằng webpack-dev-server phải được cài đặt toàn cầu.
Tôi xem qua một số lỗi máy chủ như không tìm thấy webpack, vì vậy tôi đã liên kết Webpack bằng lệnh liên kết.
Trong đầu ra Giải quyết một số vấn đề về đường dẫn tuyệt đối.

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

chỉ cần gỡ bỏ cài đặt cục bộ của webpack-dev-server và cài đặt nó trên toàn cầu đã khắc phục sự cố này cho tôi.
Sam

47
Tôi nghĩ rằng loaderstùy chọn đã được thay thế bằng rulesxem webpack.js.org/concept/loaders
Olotin Temitope

@OlotinTemitope Vâng, cảm ơn! Điều này giải quyết vấn đề của tôi!
Simon,

39

Chỉ cần thay đổi từ "trình tải" thành "quy tắc" trong "webpack.config.js"

Bởi vì bộ tải được sử dụng trong Webpack 1 và các quy tắc trong Webpack2. Bạn có thể thấy có sự khác biệt .


32

Tôi đã giải quyết vấn đề này bằng cách xóa chuỗi trống khỏi mảng giải quyết của mình. Kiểm tra tài liệu giải quyết trên trang webpack .

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

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

2
Tại sao không hoạt động nữa? Trong các phiên bản cũ của webpack, tôi luôn nhìn thấy chuỗi trống ở chỉ mục đầu tiên của extensionsgiá trị mảng
guildima

25

Hãy thử các bước dưới đây:

npm uninstall webpack --save-dev

theo dõi bởi

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

Sau đó, bạn sẽ có thể nuốt một lần nữa. Đã khắc phục sự cố cho tôi.


16

Đối với những người như tôi, người đã bắt đầu gần đây: loadersTừ khóa được thay thế bằng rules; mặc dù nó vẫn đại diện cho khái niệm bộ nạp. Vì vậy, của tôi webpack.config.js, đối với một ứng dụng React, như sau:

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

Trong webpack.config.js, hãy thay thế bộ tải: [..] bằng quy tắc: [..] Nó hoạt động với tôi.


9

Nó hoạt động bằng cách sử dụng rulesthay vìloaders

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

8

Tệp cấu hình của Webpack đã thay đổi trong nhiều năm (có thể với mỗi bản phát hành chính). Câu trả lời cho câu hỏi:

Tại sao tôi gặp lỗi này

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

là do tệp cấu hình không khớp với phiên bản webpack đang được sử dụng.

Câu trả lời được chấp nhận không nêu điều này và các câu trả lời khác ám chỉ điều này nhưng không nêu rõ ràng npm install webpack@2.1.0-beta.22 , Chỉ cần thay đổi từ "bộ tải" thành "quy tắc" trong "webpack.config.js " , và cái này . Vì vậy, tôi quyết định cung cấp câu trả lời của tôi cho câu hỏi này.

Gỡ cài đặt và cài đặt lại webpack hoặc sử dụng phiên bản webpack toàn cầu sẽ không khắc phục được sự cố này. Sử dụng đúng phiên bản webpack cho tệp cấu hình đang được sử dụng là điều quan trọng.

Nếu sự cố này đã được khắc phục khi sử dụng phiên bản toàn cầu, có thể có nghĩa là phiên bản toàn cầu của bạn đã "cũ" và định dạng tệp webpack.config.js mà bạn đang sử dụng là "cũ" nên chúng khớpmọi thứ hiện hoạt động . Tôi tất cả vì mọi thứ hoạt động, nhưng muốn độc giả biết lý do tại sao họ làm việc.

Bất cứ khi nào bạn nhận được cấu hình webpack mà bạn hy vọng sẽ giải quyết được vấn đề của mình ... hãy tự hỏi mình xem cấu hình webpack dùng cho phiên bản nào.

Có rất nhiều tài nguyên tốt để học webpack. Một số thì:

  • Trang web chính thức Webpack mô tả cấu hình webpack, hiện tại phiên bản 4.x . Mặc dù đây là một tài nguyên tuyệt vời để tra cứu cách thức hoạt động của webpack, nhưng không phải lúc nào nó cũng là cách tốt nhất để tìm hiểu cách 2 hoặc 3 tùy chọn trong webpack hoạt động cùng nhau để giải quyết vấn đề. Nhưng đây là nơi tốt nhất để bắt đầu vì nó buộc bạn phải biết bạn đang sử dụng phiên bản webpack nào. :-)
  • Webpack (v3?) Theo Ví dụ - thực hiện một cách tiếp cận nhỏ để học webpack, chọn một vấn đề và sau đó chỉ ra cách giải quyết nó trong webpack. Tôi thích cách tiếp cận này. Thật không may, nó không dạy webpack 4 nhưng vẫn tốt.

  • Thiết lập Webpack4, Babel và React từ đầu, đã xem lại - Điều này dành riêng cho React nhưng tốt nếu bạn muốn tìm hiểu nhiều thứ cần thiết để tạo ứng dụng một trang phản ứng.

  • Webpack (v3) - Phần khó hiểu - Tốt và bao gồm rất nhiều điều. Nó được đề ngày 10 tháng 4 năm 2016 và không bao gồm webpack4 nhưng nhiều điểm giảng dạy có giá trị hoặc hữu ích để học.

Có rất nhiều tài nguyên tốt hơn để học webpack4 bằng ví dụ, hãy thêm ý kiến ​​nếu bạn biết người khác. Hy vọng rằng các bài viết về webpack trong tương lai sẽ nêu rõ các phiên bản đang được sử dụng / giải thích.


7

Tôi gặp sự cố tương tự và tôi đã giải quyết nó bằng cách cài đặt phiên bản npm mới nhất:

npm install -g npm@latest

và sau đó thay đổi webpack.config.jstệp để giải quyết

- config.resolve.extensions [0] không được để trống.

bây giờ giải quyết tiện ích mở rộng sẽ trông giống như:

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

sau đó chạy npm start.


Điều này đã làm việc cho tôi. Trong tệp webpack.config.js của tôi, tôi có một mục nhập chẳng hạn như các vùng: ['', '.js', '.jsx']. Tôi đã loại bỏ mục trống '' và nó hoạt động. config.resolve.extensions [0] đề cập đến mục đầu tiên được giải quyết: {extensions: ['', '.js', '.jsx']} trong tệp webpack.config.js.
Ajitesh

5

Lỗi này thường xảy ra khi bạn có phiên bản xung đột (js góc). Vì vậy, gói web không thể khởi động ứng dụng. Bạn có thể chỉ cần sửa nó bằng cách gỡ bỏ gói web và cài đặt lại nó.

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

Khởi động lại ứng dụng của bạn và mọi thứ đều ổn.

Tôi hy vọng có thể giúp một ai đó. Chúc mừng


Tôi gặp sự cố này khi nâng cấp dự án lên phiên bản Angular mới hơn. Chỉ cần cài đặt lại Webpack đã hoạt động! Cảm ơn!
Iván Pérez

3

Tôi nhận được thông báo lỗi tương tự khi giới thiệu webpack vào một dự án mà tôi đã tạo bằng 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!

Tôi bắt đầu sử dụng lại sợi để khắc phục sự cố cho tôi:

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

Tôi thấy liên kết sau hữu ích: Thiết lập Môi trường React bằng webpack và Babel


Tôi đã thử điều này, tất cả đều hoạt động tốt ngoại trừ có một số cảnh báo nhưng khi tôi thực hiện lần cuối cùng "bắt đầu sợi", nó cho tôi lỗi "Không tìm thấy lệnh bắt đầu", bạn có biết cách khắc phục điều này không? Cám ơn!
Tony Chen

2

Tôi đã thay đổi bộ tải để quy định trong webpack.config.jstập tin và cập nhật các gói html-webpack-plugin, webpack, webpack-cli, webpack-dev-serverphiên bản mới nhất sau đó nó làm việc cho tôi!


2

Tôi gặp sự cố tương tự và tôi đã giải quyết vấn đề này bằng cách thực hiện một số thay đổi trong tệp web.config.js của mình. FYI Tôi đang sử dụng phiên bản mới nhất của webpack và webpack-cli. Thủ thuật này vừa cứu được ngày của tôi. Tôi đã đính kèm ví dụ về tệp web.config.js của tôi trước và sau phiên bản.

Trước:

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

Sau: Tôi vừa thay thế bộ tải thành các quy tắc trong đối tượng mô-đun như bạn có thể thấy trong đoạn mã của tôi.

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

Hy vọng rằng, Điều này sẽ giúp ai đó thoát khỏi vấn đề này.


babel-loader, không phảibable-loader
AntonAL

1

Lỗi này xảy ra với tôi khi tôi sử dụng path.resolve (), để thiết lập cài đặt 'mục nhập' và 'đầu ra'. entry: path.resolve(__dirname + '/app.jsx'). Thử xementry: __dirname + '/app.jsx'


1

Trong trường hợp của tôi, vấn đề là tên của thư mục chứa dự án, có dấu "!" Tất cả những gì tôi làm là đổi tên thư mục và mọi thứ đã sẵn sàng.


1

Tôi cũng gặp phải vấn đề tương tự, và trong trường hợp của tôi, tất cả những gì tôi phải làm là điều tốt lành

đọc thông báo lỗi ...

Thông báo lỗi của tôi cho biết:

Đối tượng cấu hình không hợp lệ. Webpack đã được khởi tạo bằng đối tượng cấu hình không khớp với lược đồ API. - config.entry phải là một trong những cái sau: function | object {: non-rỗng string | [chuỗi không rỗng]} | chuỗi không rỗng | [chuỗi không rỗng] -> (Các) điểm đầu vào của quá trình biên dịch. Chi tiết: * config.entry phải là một thể hiện của hàm -> Một Hàm trả về một đối tượng mục nhập, một chuỗi mục nhập, một mảng mục nhập hoặc một lời hứa cho những thứ này. * config.entry ['styles'] phải là một chuỗi. -> Chuỗi được giải quyết thành một mô-đun được tải khi khởi động. *config.entry ['styles'] không được chứa mục 'C: \ MojiFajlovi \ Faks \ 11Master \ 1Semestar \ UDD-UpravljanjeDigitalnimDokumentima \ Projekat \ nc-front \ node_modules \ bootstrap \ dist \ css \ bootstrap.min.css' hai lần .

Như dòng thông báo lỗi in đậm cho biết, tôi vừa mở angular.jsontệp và thấy tệp stylestrông giống như sau:

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

... vì vậy tôi chỉ xóa dòng được đánh dấu ...

và tất cả đều diễn ra tốt đẹp. :)


0

Tôi cũng mắc lỗi như bạn.

npm gỡ cài đặt webpack --save-dev

&

npm cài đặt webpack@2.1.0-beta.22 --save-dev

giải quyết nó !.



0

Sử dụng cú pháp khác nhau (cờ ...), có thể gây ra sự cố này từ phiên bản này sang phiên bản khác trong webpack (3,4,5 ...), bạn phải đọc cấu hình webpack mới cập nhật và các tính năng không dùng nữa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.