Obtenir "erreur:" sortie.chemin d'accès " doit être un chemin absolu ou `/`"

Je suis nouveau dans le développement JS, dans une tentative de chargement à chaud des changements en utilisant webpack-dev-server je garde au-dessus de l'exception. La pile exacte est:

Error: `output.path` needs to be an absolute path or `/`.
at Object.Shared.share.setFs (/Users/mybox/work/day1/ex6/node_modules/webpack-dev-middleware/lib/Shared.js:88:11)
at Shared (/Users/mybox/work/day1/ex6/node_modules/webpack-dev-middleware/lib/Shared.js:214:8)
at module.exports (/Users/mybox/work/day1/ex6/node_modules/webpack-dev-middleware/middleware.js:22:15)
at new Server (/Users/mybox/work/day1/ex6/node_modules/webpack-dev-server/lib/Server.js:56:20)

at startDevServer (/Users/mybox/work/day1/ex6/node_modules/webpack-dev-server/bin/webpack-dev-server.js:379:12)
at processOptions (/Users/mybox/work/day1/ex6/node_modules/webpack-dev-server/bin/webpack-dev-server.js:317:3)
at Object.<anonymous> (/Users/mybox/work/day1/ex6/node_modules/webpack-dev-server/bin/webpack-dev-server.js:441:1)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)

Voici les fichiers de configuration webpack que j'ai déjà essayés:

module.exports = {
    entry: "./client/app.jsx",
    output: {
        path: "dist/js",
        filename: "bundle.js",
        publicPath: "http://127.0.0.1:2992/js"
    },
    module: {
        loaders: [
            {
                test: /.jsx?$/,
                loader: "babel-loader",
                include: /client/
            }
        ]
    }
};

Et:

module.exports = {
    entry: "./client/app.jsx",
    output: {
        path: "/Users/mybox/work/day1/ex6/dist/js",
        filename: "bundle.js",
        publicPath: "http://127.0.0.1:2992/js"
    },
    module: {
        loaders: [
            {
                test: /.jsx?$/,
                loader: "babel-loader",
                include: /client/,
                query: {
                    presets:['react']
                }
            }
        ]
    }
};

Ci-dessous est mon paquet.fichier json

{
 "name": "ex6",
 "version": "1.0.0",
 "main": "index.js",
 "scripts": {
   "server": "node index.js",
   "hot": "webpack-dev-server --inline --hot --port 2992 --progress --colors",
   "dev": "webpack-dev-server --inline --dev --port 2992 --progress --colors"
 },
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
  "babel-preset-es2015": "^6.22.0",
  "hapi": "^16.1.0",
  "inert": "^4.1.0"
},
"devDependencies": {
"babel": "^6.5.2",
"babel-cli": "^6.22.2",
"babel-core": "^6.22.1",
"babel-loader": "^6.2.10",
"babel-preset-react": "^6.22.0",
"builder": "^3.2.1",
"webpack": "^2.2.1",
"webpack-dev-server": "^2.3.0"
},
"description": ""
}
24
demandé sur halfer 2017-02-10 21:42:18

3 réponses

Comme le message d'erreur l'indique, vous devez utiliser le chemin absolu.

Pour obtenir un chemin absolu du répertoire courant, Vous pouvez utiliser __dirname pour obtenir le répertoire courant, puis ajoutez dist/js. Donc, ce serait quelque chose comme,

output: {
    path: __dirname + "/dist/js", // or path: path.join(__dirname, "dist/js"),
    filename: "bundle.js"
}

Les deux fonctionneront très bien. Vous pouvez lire sur la configuration webpack ici

Edit : pour utiliser path: path.join(__dirname, "dist/js"), vous aurez besoin du module path intégré au nœud.

Citant les documents:

Module de chemin : Il fournit des utilitaires pour travailler avec des chemins de fichiers et de répertoires. L'utiliser avec le préfixe _ _ dirname global empêchera les problèmes de chemin de fichier entre les systèmes d'exploitation et permettra aux chemins relatifs de fonctionner comme prévu.

Vous pouvez l'exiger en haut de votre webpack.config.js comme

var path = require('path');
.....
....
..
output: {
    path: path.join(__dirname, "dist/js"),
    filename: "bundle.js"
}
// rest of the configuration

En dehors des deux méthodes ci-dessus, vous pouvez également utiliser path.resolve comme mentionné ici.

path: path.resolve(__dirname, "dist/js")

J'espère que ça aide:)

64
répondu Hardik Modha 2017-03-23 17:54:37

Vous devez l'inclure en haut de ou webpack.config.fichier js var path = require('path') et puis dans votre chemin, faites ce qui suit: path: path.join(__dirname, "dist/js")

0
répondu Michael Guild 2017-02-13 15:40:17

Vous pouvez l'utiliser comme code suivant pour obtenir le chemin absolu.

output: {
  path: require('path').resolve("./dist/js"),
  filename: 'bundle.js',
  publicPath: 'http://127.0.0.1:2992/js'
}
-1
répondu Muhammad Ali 2017-02-13 09:29:54