Je suis Lynda.com - L'entraînement essentiel de React.js par Eve Porcello. Dans la vidéo "Construire avec Webpack", j'ai suivi les étapes décrites exactement par l'auteur, mais la commande "webpack" a échoué, donnant l'erreur suivante
Objet de configuration non valide. Webpack a été initialisé à l'aide d'un objet de configuration qui ne correspond pas au schéma de l'API . - configuration.output.path: La valeur fournie "dist/assets" n'est pas un chemin absolu!
Voici mes fichiers webpack.config.js et package.json.
webpack.config.js
var webpack = require("webpack");
module.exports = {
entry: "./src/index.js",
output: {
path: "dist/assets",
filename: "bundle.js",
publicPath: "assets"
},
devServer: {
inline: true,
contentBase: "./dist",
port: 3000
},
module: {
loaders: [
{
test: /\.js$/,
exclude: /(node_modules)/,
loader: "babel-loader",
query: {
presets: ["latest", "stage-0", "react"]
}
}
]
}
}
package.json
{
"name": "react-essential",
"version": "1.0.0",
"description": "A project focusing on React and related tools",
"main": "index.js",
"scripts": {
"start": "httpster -d ./dist -p 3000"
},
"author": "Indu Pillai",
"license": "MIT",
"devDependencies": {
"babel-cli": "^6.18.0",
"babel-loader": "^6.4.1",
"babel-preset-latest": "^6.16.0",
"babel-preset-react": "^6.16.0",
"babel-preset-stage-0": "^6.16.0",
"webpack": "^2.3.2",
"webpack-dev-server": "^2.4.2"
}
}
J'ai répété les étapes encore et encore, mais ça ne marche pas. Je suis assez nouveau dans ce domaine du Webpack, je ne suis donc pas en mesure de déterminer le problème réel et le type de chemin absolu qu’il nécessite. J'ai aussi essayé un chemin absolu suggéré par une réponse à une autre question (similaire), mais cela n'a pas fonctionné.
Je vous remercie!
Cela compilera avec le dernier pack Web - à partir du 10 avril 2017:
var webpack = require("webpack");
module.exports = {
entry: __dirname + "/src/index.js",
output: {
path: __dirname + "/dist/assets",
filename: "bundle.js",
publicPath: "assets"
},
devServer: {
inline: true,
contentBase: __dirname + "/dist",
port: 3000
},
module: {
rules: [{
test: /\.js$/,
loader: ["babel-loader"],
}]
}
}
Je suis le même cours que vous et moi avons dû procéder comme suit pour que Webpack produise correctement le fichier bundle.js:
npm install webpack
)npm install -g [email protected]
(elle recommande d’utiliser Sudo npm install -g
afin que vous puissiez utiliser Sudo
ou non).require('path')
car je rencontrais des erreurs de chemin qui ne résolvaient pas et je devais aussi npm install babel-loader
car le fichier package.json
ne le chargeait pas pour une raison quelconque, ce qui un ajout de path.resolve
pour le dossier node_modules
Mon fichier webpack.config
ressemble maintenant à ce qui suit:
const webpack = require('webpack');
const path = require('path');
module.exports = {
entry: path.resolve(__dirname, './src/index'),
output: {
path: path.resolve(__dirname, './dist/assets'),
filename: 'bundle.js',
publicPath: 'assets'
},
devServer: {
inline: true,
contentBase: path.resolve(__dirname, './dist'),
port: 3000
},
module: {
loaders: [{
test: /\.js$/,
exclude: /(node_modules)/,
loader: path.resolve(__dirname, './node_modules/babel-loader'),
query: {
presets: ['latest', 'stage-0', 'react']
}
}]
}
}
Finalement, exécuter webpack --display-error-details
m'a montré quelles étaient les erreurs, mais le fichier de configuration que j'ai collé ici a finalement fonctionné pour moi.
Il est à noter que cela vous permettra (espérons-le) de terminer le cours lui-même, mais cela ne vous aidera pas à savoir ce qui a été mis à jour ou à migrer pour rester à jour et utiliser Webpack 2. Il existe d'autres réponses ici. traiter avec la migration qui devrait être examiné aussi.
J'espère que cela vous aide!
Ce tutoriel a été réalisé avec la version 1 de Webpack, mais vous utilisez la version 2 la plus récente.
Vous pouvez suivre ce guide de migration pour faire fonctionner votre code: https://webpack.js.org/migrate/3/
Voici votre configuration mise à jour
var webpack = require("webpack");
var folder = __dirname;
module.exports = {
entry: "./src/index.js",
output: {
path: folder + "dist/assets",
filename: "bundle.js",
publicPath: "/assets"
},
devServer: {
inline: true,
contentBase: folder + "dist",
port: 3000
},
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules)/,
use: "babel-loader",
query: {
presets: ["latest", "stage-0", "react"]
}
}
]
}
}
remplacer ~ chargeurs ~ par ~ règles ~
module: {
loaders: [
{
Apparemment, les chargeurs de mots ont été remplacés ici par des règles.
module: {
rules: [
{
En remarque, dans les fichiers d’exercices, l’instructeur utilise cette syntaxe pour le chargeur babel:
loaders: [
{
test: /\.js$/,
exclude: /(node_modules)/,
loader: ["babel-loader"],
query: {
presets: ["latest", "stage-0", "react"]
}
},
]
qui échoue sur le webpack 2.5.0 avec une erreur:
Error: options/query cannot be used with loaders (use options for each array item)
Ceci est résolu en supprimant les crochets autour de "babel-loader":
loader: "babel-loader", //no brackets - not an array
ou en spécifiant le chargeur et les options correspondantes via la syntaxe "use":
loaders: [
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['latest', 'stage-0', 'react']
}
}
}
]
Espérons que cela soit réglé là-bas chez Lynda! Ces nouvelles technologies évoluent si rapidement! Pour plus d'informations sur le chargeur babel: https://github.com/babel/babel-loader
Webpack est un peu difficile que de créer-réagir-application. le moyen le plus simple et le plus facile de créer des projets de réaction en utilisant les commandes suivantes de https://facebook.github.io/react/docs/installation.html
npm install -g create-react-app
create-react-app hello-world
cd hello-world
npm start
Vous pouvez suivre tout le code de réaction du cours mais attendre Webpack car create-react-app compile le code jsx et fait tout ce qui est webpack, etc.
lorsque vous migrez vers la nouvelle version de Webpack, cette erreur se produit. Pour résoudre ceci, vous devez fournir un chemin absolu à votre répertoire comme ceci
module.exports = {
entry: __dirname + '/src/index.js',
output: {
path: __dirname + '/dist',
filename: 'bundle.js'
}
};
Pour que cela fonctionne avec la dernière version de webpack v3, vous devez modifier peu le fichier webpack.config.js. Votre code devrait ressembler à ceci après la mise à jour
var webpack = require("webpack");
var path = require('path')
module.exports = {
entry: path.resolve(__dirname + "/src/index.js"),
output: {
path: path.resolve(__dirname + "/dist/assets"),
filename: "bundle.js",
publicPath: "assets"
},
devServer: {
inline: true,
contentBase: __dirname + '/dist',
port: 3000
},
module: {
loaders: [
{
test: /\.js$/,
exclude: /(node_modules)/,
use: {
loader: "babel-loader",
options: {
presets: ["latest", "stage-0", "react"]
}
}
}
]
}
}
et votre fichier package.json devrait ressembler à ceci
{
"name": "activity-counter-application",
"version": "1.0.0",
"description": "A project focusing on building Activity Counter using React and related tools",
"main": "./index.js",
"scripts": {
"start": "./node_modules/.bin/webpack-dev-server"
},
"author": "RJ",
"license": "MIT",
"devDependencies": {
"babel-cli": "^6.24.1",
"babel-core": "^6.25.0",
"babel-loader": "^7.1.1",
"babel-preset-latest": "^6.24.1",
"babel-preset-react": "^6.24.1",
"babel-preset-stage-0": "^6.24.1",
"webpack": "^3.5.1",
"webpack-dev-server": "^2.7.0"
},
"dependencies": {
"react": "^15.6.1",
"react-dom": "^15.6.1"
}
}
Vous devez définir le output.path comme chemin absolu
Vous pouvez ajouter la ligne suivante à l'avant de webpack.config.js
var path = require('path')
et changez la sortie comme suit
output: {
path: path.resolve(__dirname, "dist/assets"),
filename: "bundle.js",
publicPath: "assets"
}
J'ai eu le même problème et un peu plus. J'ai donc créé un script shell pour simplifier et accélérer le processus d'installation.
pour utilisateurs Linux
essayez ceci bash script auto_conf_wb et ça
webpack
babel
sever
pour vous.
Notez que cela concerne uniquement l'utilisation de ES6+
, webpack
, babel
.
Assurez-vous que vous avez ajouté la const path = require('path');
en haut de votre fichier webpack.config.js et que le chemin et le chemin doivent ressembler à path: path.resolve(__dirname, 'dist/assets'),
.