構成オブジェクトが無効です。Webpackは、APIスキーマと一致しない構成オブジェクトを使用して初期化されました


102

このシンプルなhelloworldreactアプリをオンラインコースから作成しましたが、次のエラーが発生します。

構成オブジェクトが無効です。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?、resolve?、resolveLoader?、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?、modules?、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が見つからないなどのサーバーエラーを確認したので、linkコマンドを使用して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オプションはwebpack.js.org/concepts/loadersrules参照して置き換えられたと思います
Olotin Temitope 2018年

@OlotinTemitopeええ、ありがとう!これは私の問題を解決します!
サイモン

41

「webpack.config.js」で「ローダー」から「ルール」に変更するだけです

ローダーはWebpack1で使用され、ルールはWebpack2で使用されるためです。違いがあることがわかります。


32

この問題は、resolve配列から空の文字列を削除することで解決しました。webpackのサイトで解決ドキュメントを確認してください。

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

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

2
なぜもう動かないのですか?古いバージョンのwebpackでは、extensions配列値の最初のインデックスに空の文字列が常に表示されます
guilima 2017

25

以下の手順を試してください。

npm uninstall webpack --save-dev

に続く

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

その後、あなたは再び一口できるはずです。私の問題を修正しました。


16

:最近始めた私のような人のためのloadersキーワードがされて置き換えrules、それはまだローダーの概念を表していますが。したがって、webpack.config.jsReactアプリの場合、私のは次のようになります。

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の構成ファイルは何年にもわたって変更されています(メジャーリリースごとに変更される可能性があります)。質問への答え:

なぜこのエラーが発生するのですか

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

設定ファイルが使用されているwebpackのバージョンと一致しないためです。

受け入れられた回答はこれを述べておらず、他の回答はこれをほのめかしていますが、明確に述べていませんnpm install webpack@2.1.0-beta.22「webpack.config.js」で「ローダー」から「ルール」に変更するだけです"、そしてこれ。そこで、この質問に答えることにしました。

webpackをアンインストールして再インストールするか、webpackのグローバルバージョンを使用しても、この問題は修正されません。 重要なのは、使用している構成ファイルに正しいバージョンのwebpackを使用することです。

この問題は、あなたの使用してグローバルバージョンを使用して、あなたのグローバルバージョンが「古い」だった可能性が高い手段とwebpack.config.jsファイル形式を修正しましたので、もし「古い」である彼らは一致するとヴィオラの今の仕事をもの。私はすべてうまくいっていますが、読者になぜうまくいったのかを知ってもらいたいです。

問題を解決することを期待するwebpack構成を取得するときはいつでも、構成のWebpackのバージョンを自問してください。

webpackを学ぶための良いリソースがたくさんあります。いくつかは:

  • 現在バージョン4.xのWebpack構成を説明する公式WebpackWebサイト。これはwebpackがどのように機能するかを調べるための優れたリソースですが、webpackの2つまたは3つのオプションがどのように連携して問題を解決するかを学ぶのに常に最適であるとは限りません。ただし、使用しているWebpackのバージョンを知る必要があるため、開始するのに最適な場所です。:-)
  • 例によるWebpack(v3?) -一口サイズのアプローチでwebpackを学習し、問題を選択して、webpackで解決する方法を示します。私はこのアプローチが好きです。残念ながら、それはwebpack 4を教えていませんが、それでも良いです。

  • Webpack4、Babel、Reactを最初からセットアップする、再検討-これはReactに固有ですが、reactシングルページアプリを作成するために必要な多くのことを学びたい場合に適しています。

  • Webpack(v3)—紛らわしい部分-優れており、多くの分野をカバーしています。2016年4月10日付けで、webpack4は対象外ですが、多くの教育ポイントは有効であるか、学ぶのに役立ちます。

例としてwebpack4を学ぶためのより良いリソースがたくさんあります。他の人を知っているなら、コメントを追加してください。うまくいけば、将来のwebpackの記事には、使用されている/説明されているバージョンが記載されています。


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ファイルに、extensions:[''、 '。js'、 '。jsx']などのエントリがありました。空のアイテム ''を削除しましたが、機能しました。configuration.resolve.extensions [0]は、webpack.config.jsファイルのresolve:{extensions:[''、 '。js'、 '。jsx']}の下にある最初のアイテムを参照します。
Ajitesh 2017

5

このエラーは通常、バージョン(angular js)が競合している場合に発生します。そのため、webpackはアプリケーションを起動できませんでした。Webpackを削除して再インストールするだけで、簡単に修正できます。

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

アプリケーションを再起動すると、すべて問題ありません。

私は誰かを助けることができることを願っています。乾杯


プロジェクトを新しいバージョンのAngularにアップグレードしているときに、この問題が発生しました。Webpackを再インストールするだけでうまくいきました!ありがとう!
イバン・ペレス

3

npm initで作成したプロジェクトにwebpackを導入すると、同じエラーメッセージが表示されました。

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を使用してReact環境をセットアップする


私はこれを試しましたが、いくつかの警告があることを除いてすべて正常に動作していますが、最後に「ヤーンスタート」を称賛すると、「コマンドスタートが見つかりません」というエラーが表示されます。これを修正する方法を知っていますか?THX!
Tony Chen

2

私は変更ローダーをするルールwebpack.config.jsファイルとパッケージを更新しhtml-webpack-pluginwebpackwebpack-cliwebpack-dev-serverそれは私のために働いた最新バージョンに!


2

同じ問題が発生しましたが、web.config.jsファイルにいくつか変更を加えることでこれを解決しました。参考までに、最新バージョンの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」および「output」設定をセットアップするときに発生します。 entry: path.resolve(__dirname + '/app.jsx')。ちょうど試してentry: __dirname + '/app.jsx'


1

私の場合、問題はプロジェクトが含まれているフォルダーの名前で、「!」という記号が付いていました。フォルダの名前を変更するだけで、すべての準備が整いました。


1

私も同じ問題を抱えていました、そして私の場合、私がしなければならなかったのは古き良き人だけでした」

エラーメッセージを読む...

私のエラーメッセージは言った:

構成オブジェクトが無効です。Webpackは、APIスキーマと一致しない構成オブジェクトを使用して初期化されています。--configuration.entryは、次のいずれかである必要があります。オブジェクト{:空でない文字列| [空でない文字列]} | 空でない文字列| [空でない文字列]->コンパイルのエントリポイント。詳細:* configuration.entryは、関数のインスタンスである必要があります->エントリオブジェクト、エントリ文字列、エントリ配列、またはこれらのものへのpromiseを返す関数。* configuration.entry ['styles']は文字列である必要があります。->文字列は、起動時にロードされるモジュールに解決されます。*configuration.entry ['styles']には、アイテム 'C:\ MojiFajlovi \ Fax \ 11Master \ 1Semestar \ UDD-UpravljanjeDigitalnimDokumentima \ Projectat \ nc-front \ node_modules \ bootstrap \ dist \ css \ bootstrap.min.css'を2回含めることはできません。 。

太字のエラーメッセージ行にあるように、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

異なる構文(フラグ...)を使用すると、Webpack(3,4,5 ...)のバージョンごとにこの問題が発生する可能性があるため、新しいWebpack構成の更新および非推奨の機能を読み取る必要があります。


0

私にとって、私は変更しなければなりませんでした:

cheap-module-eval-source-map

に:

eval-cheap-module-source-map

V4へのV5のニュアンス。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.