2017-02-10 26 views
19

Jestem nowym deweloperem JS, próbując dokonać zmian w obciążeniu za pomocą serwera webpack-dev, który utrzymuję powyżej wyjątku. Dokładna stos jest:Uzyskiwanie "Błąd:` output.path` musi być ścieżką bezwzględną lub `/` "

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) 

Oto pliki WebPACK config Próbowałem już:

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/ 
      } 
     ] 
    } 
}; 

I:

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'] 
       } 
      } 
     ] 
    } 
}; 

Poniżej jest mój plik package.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": "" 
} 

Odpowiedz

51

Jak informuje komunikat o błędzie, użytkownik ed, aby użyć ścieżki bezwzględnej.

Aby uzyskać bezwzględną ścieżkę do bieżącego katalogu, można użyć __dirname, aby uzyskać bieżący katalog, a następnie dołączyć dist/js. Więc to byłoby coś,

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

Zarówno będzie działać dobrze. Można przeczytać o konfiguracji WebPACK here

Edytuj: Aby korzystać path: path.join(__dirname, "dist/js") trzeba będzie wymagać węzeł wbudowanego modułu path.

Cytując docs:

Path module: It provides utilities for working with file and directory paths. Using it with the prefix __dirname global will prevent file path issues between operating systems and will allow relative paths to work as expected.

Można wymagać go na górze webpack.config.js jak

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

oprócz dwóch powyższych metod, można również użyć path.resolve jak wspomniano here.

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

Nadzieja to pomaga :)

+0

Pracował jak czar !! dzięki @hardik .. –

+0

Z jakiegoś powodu nadal otrzymuję ten sam wyjątek ze ścieżką: "./dist/js", podczas gdy __nazwa + "dist/js" działa dobrze. –

+0

'./Dist/js' jest ścieżką względną. Może dlatego pojawia się błąd. Ale w moim projekcie to działa dobrze. Z której wersji pakietu internetowego korzystasz? –

-1

Można go używać jak poniższy kod, aby uzyskać bezwzględną ścieżkę.

output: { 
    path: require('path').resolve("./dist/js"), 
    filename: 'bundle.js', 
    publicPath: 'http://127.0.0.1:2992/js' 
} 
+1

nie wymaga w ścieżce.To powinno być zdefiniowane na górze pliku, aby można było odwoływać się do innych ścieżek. To zła praktyka. –

0

trzeba podać to na górze lub plik webpack.config.js var path = require('path') a potem w drogę należy wykonać następujące czynności: path: path.join(__dirname, "dist/js")

Powiązane problemy