Ich versuche Webpack zum ersten Mal zu arbeiten und ich mache es auf einer einfachen Website, aber egal was ich versuche, es funktioniert nie richtig. Ich bin seit Wochen dran und habe jeden Thread vergeblich ausprobiert. Ich brauche nur jemanden, der kein Problem mit Webpack hat, um meinen Code anzuschauen und einen Kommentar zu geben, wie er richtig funktioniert.Verwenden von Webpack für einfache Website
Ich habe alle meine Quellcode im src-Verzeichnis. Bibliotheken und Entwicklerabhängigkeiten befinden sich im Verzeichnis node_modules. Und ich möchte Webpack laufen lassen und alles ins dist Verzeichnis ausgeben lassen. Wenn ich einen Server verwende, der nur die Dateien im Verzeichnis src verwendet, funktioniert es gut, aber sobald ich das webpack starte und versuche, die Dateien im Verzeichnis dist zu verwenden, fällt alles auseinander.
Hier webpack.config.js:
var webpack = require('webpack');
var path = require('path');
module.exports = {
context: __dirname + "\\src",
debug: true,
entry: "./index.webpack.js",
output: {
path: __dirname + "\\dist",
filename: "index.min.js"
},
module: {
loaders: [
{
test:/\.js$/,
exclude:/(node_modules)/,
loader:'babel-loader',
query: {
presets:['es2015']
}
},
{
test:/\.css$/,
exclude:/(node_modules)/,
loader:'style-loader!css-loader'
},
{
test:/\.less$/,
exclude:/(node_modules)/,
loader:'style-loader!css-loader!less-loader'
},
{
test:/\.(png|woff|woff2|eot|ttf|svg)$/,
exclude:/(node_modules)/,
loader: 'url-loader?limit=100000'
},
{
test:/\.(jpe?g|png|gif|svg)$/i,
exclude:/(node_modules)/,
loader: 'url?limit=10000!img?progressive=true'
},
{
test:/\.html$/,
exclude:/(node_modules)/,
loader: 'html-loader'
}
]
},
plugins: [
new webpack.optimize.DedupePlugin(),
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false }),
]
};
Und Punkt mein Eintrag ist index.webpack.js:
require('file?name=[name].[ext]!./index.html');
require('jQuery');
require('bootstrap');
require('file?name=[name].[ext]!./css/footer.css');
require('file?name=[name].[ext]!./css/header.css');
require('file?name=[name].[ext]!./css/styles.css');
require('file?name=[name].[ext]!./fonts/HelveticaRounded-Black.eot');
require('file?name=[name].[ext]!./fonts/HelveticaRounded-Black.svg');
require('file?name=[name].[ext]!./fonts/HelveticaRounded-Black.ttf');
require('file?name=[name].[ext]!./fonts/HelveticaRounded-Black.woff');
require('file?name=[name].[ext]!./img/butterfly.gif');
require('file?name=[name].[ext]!./img/dr photo.jpg');
require('file?name=[name].[ext]!./img/firefly.gif');
require('file?name=[name].[ext]!./img/footerspikes.gif');
require('file?name=[name].[ext]!./img/mainheaderimage.jpg');
require('file?name=[name].[ext]!./img/mushrooms.gif');
require('file?name=[name].[ext]!./img/teethkids.gif');
require('file?name=[name].[ext]!./img/titlebanner.gif');
require('file?name=[name].[ext]!./refs/footer.html');
require('file?name=[name].[ext]!./refs/header.html');
require('file?name=[name].[ext]!./refs/leftmargin.html');
require('file?name=[name].[ext]!./refs/rightmargin.html');
Was denken Sie?
--edited nach answer--
meine aktualisiert webpack.config.js ersten Versuch:
var debug = process.env.NODE_ENV !== "production";
var webpack = require('webpack');
var path = require('path');
var htmlWebpackPlugin = require('html-webpack-plugin');
var commonsChunkPlugin = require('webpack/lib/optimize/CommonsChunkPlugin');
var cleanWebpackPlugin = require('clean-webpack-plugin');
module.exports = {
context: path.join(__dirname, 'src'),
debug: true,
entry: {
entry: path.join(__dirname, 'src', 'index.webpack.js'),
vendor: ['jquery', 'bootstrapjs']
},
resolve: {
alias: {
'jquery': path.join(__dirname, 'node_modules', 'jquery', 'dist', 'jquery.min.js'),
'bootstrapjs': path.join(__dirname, 'node_modules', 'bootstrap', 'dist', 'js', 'bootstrap.min.js')
}
},
output: {
path: path.join(__dirname, 'dist'),
filename: "[name].[chunkhash].bundle.min.js"
},
module: {
loaders: [
{
test:/\.js$/,
exclude:/node_modules/,
include:path.join(__dirname, 'src'),
loader:'babel-loader',
},
{
test:/\.css$/,
include:path.join(__dirname, 'src'),
loader:'style-loader!css-loader'
},
{
test:/\.less$/,
include:path.join(__dirname, 'src'),
loader:'style-loader!css-loader!less-loader'
},
{
test:/\.(png|woff|woff2|eot|ttf|svg)$/,
include:path.join(__dirname, 'src'),
loader: 'url-loader?limit=100000'
},
{
test:/\.(jpe?g|png|gif|svg)$/i,
include:path.join(__dirname, 'src'),
loader: 'url-loader?limit=100000!img?progressive=true'
},
{
test:/\.html$/,
include:path.join(__dirname, 'src'),
loader: 'html-loader'
}
]
},
devServer: {
contentBase: path.join(__dirname, 'dist'),
inline: true,
stats: 'errors-only'
},
plugins: debug ? [
new cleanWebpackPlugin(['dist']),
new htmlWebpackPlugin({
template: path.join(__dirname, 'src', 'pages', 'index.html'),
hash: true,
chunks: 'commons'
}),
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
jquery: "jquery"
}),
new commonsChunkPlugin({
name: ['commons', 'vendor', 'bootstrap']
})
] : [
new cleanWebpackPlugin(['dist']),
new webpack.optimize.DedupePlugin(),
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false }),
new htmlWebpackPlugin({
template: path.join(__dirname, 'src', 'pages', 'index.html'),
hash: true,
chunks: 'commons'
}),
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
jquery: "jquery"
}),
new commonsChunkPlugin({
name: ['commons', 'vendor', 'bootstrap']
})
]
};
Meine index.webpack.js jetzt eine leere Datei ist.
Ich habe im Grunde immer noch genau die gleichen Probleme wie zuvor, nur benutze ich html-webpack-plugin anstatt alle meine Dateien in der Eingabedatei zu benötigen.
$ ist nicht definiert, obwohl ich es mit ProvidePlugin definiere.
bootstrap css geht nicht durch und es funktioniert nicht, wenn ich es in die Liste der Anbieter gesetzt habe.
irgendwelche Ideen?
Noch nie von Webpack gehört, sondern nur einen Blick darauf ......... sprachlos. Ich glaube nicht, dass Projekte dadurch leichter zu warten sind. Warum willst du das trotzdem benutzen? – Codebeat
Ich habe es mir schon angesehen. Ich ging wie jeder Thread durch und nichts scheint für mich zu funktionieren. Ich möchte es aus ein paar Gründen verwenden: 1. So kann ich less/es6 programmieren und es automatisch vorkompilieren lassen. und 2. Damit kann automatisch alles minimiert und unbenutzte Bibliotheksmethoden/Kommentare entfernt werden. Dann werden die verkleinerten/kleineren/schnelleren Dateien an den Web-Host anstatt an die größeren Entwicklerdateien gesendet. – 333OnlyHalfEvil
Dies ist keine fehlerfreie Methode, alberne Art, die Ausgabe zu verwalten. Es gibt viel einfachere Möglichkeiten, dies zu tun, ohne eine Codezeile zu ändern oder eine komplexe cfg-Datei zu schreiben. Sie müssen diese Serverseite tun. Ich habe es selbst geschrieben, aber es gibt andere Parteien wie Google, die ein Minifikationsmodul/Plugin für Ihren Webserver bereitstellen. – Codebeat