2017-04-15 21 views
0

我對我的投資組合網站使用Webpack 2,但它不是SPA - 因此,其目的不是將所有東西都輸出到我的捆綁JS中。如何阻止HTML輸出到已編譯的app.js?

我有幾個入口點.pug,.scss.js文件。像這樣:

entry: { 
    app: [ 
    path.resolve(__dirname, 'src/pug/app.pug'), 
    path.resolve(__dirname, 'src/js/app.js'), 
    path.resolve(__dirname, 'src/scss/app.scss') 
    ] 
}, 
output: { 
    path: path.resolve(__dirname, 'dist'), 
    filename: 'js/[name].js' 
} 

然而,在源尋找app.js的時候,我看到從我.pug文件呈現的HTML。

enter image description here

.pug編譯,我使用HtmlWebpackPlugin。我想我解釋發生了什麼事情最簡單的方法就是向您展示webpack.config.babel.js文件:

import webpack from 'webpack'; 
import path from 'path'; 
import autoprefixer from 'autoprefixer'; 
import HtmlWebpackPlugin from 'html-webpack-plugin'; 
import ExtractTextPlugin from 'extract-text-webpack-plugin'; 
import SvgStorePlugin from 'external-svg-sprite-loader/lib/SvgStorePlugin'; 
import bourbon from 'bourbon'; 
import neat from 'bourbon-neat'; 

const extractScss = new ExtractTextPlugin({ 
    filename: 'css/[name].css', 
    allChunks: true 
}); 

const config = { 
    entry: { 
    app: [ 
     path.resolve(__dirname, 'src/pug/app.pug'), 
     path.resolve(__dirname, 'src/js/app.js'), 
     path.resolve(__dirname, 'src/scss/app.scss') 
    ] 
    }, 
    output: { 
    path: path.resolve(__dirname, 'dist'), 
    filename: 'js/[name].js' 
    }, 
    module: { 
    rules: [ 
     { 
     test: /\.pug$/, 
     use: [ 
      { 
      loader: 'html-loader' 
      }, 
      { 
      loader: 'pug-html-loader', 
      options: { 
       pretty: false, 
       exports: false 
      } 
      } 
     ] 
     }, 
     { 
     test: /\.js$/, 
     exclude: /(node_modules|bower_components)/, 
     use: [ 
      { 
      loader: 'babel-loader', 
      options: { 
       presets: [ 
       ['es2015'] 
       ] 
      } 
      } 
     ] 
     }, 
     { 
     test: /\.(jpe?g|png|gif)$/i, 
     use: [ 
      { 
      loader: 'file-loader', 
      options: { 
       name: '/images/[name].[ext]' 
      } 
      }, 
      { 
      loader: 'image-webpack-loader', 
      options: { 
       progressive: false, 
       optipng: { 
       optimizationLevel: 7, 
       quality: '90', 
       speed: 5 
       }, 
       mozjpeg: { 
       quality: 90 
       }, 
       gifsicle: { 
       interlaced: false 
       } 
      } 
      } 
     ] 
     }, 
     { 
     test: /\.svg$/, 
     use: [ 
      { 
      loader: 'external-svg-sprite-loader', 
      query: { 
       name: 'svg/sprite.svg', 
       iconName: '[name]' 
      } 
      } 
     ] 
     }, 
     { 
     test: /\.scss$/, 
     use: extractScss.extract([ 
      { 
      loader: 'css-loader' 
      }, 
      { 
      loader: 'postcss-loader', 
      options: { 
       plugins() { 
       return [ 
        autoprefixer({ 
        browsers: ['last 2 versions', 'Explorer >= 9', 'Android >= 4'] 
        }) 
       ]; 
       } 
      } 
      }, 
      { 
      loader: 'sass-loader', 
      options: { 
       includePaths: [ 
       bourbon.includePaths, 
       neat.includePaths 
       ] 
      } 
      } 
     ]) 
     } 
    ] 
    }, 
    devServer: { 
    contentBase: path.join(__dirname, 'dist'), 
    compress: true, 
    stats: 'errors-only', 
    open: false 
    }, 
    plugins: [ 
    new SvgStorePlugin(), 
    new HtmlWebpackPlugin({ 
     title: 'Portfolio', 
     minify: { 
     collapseWhitespace: true 
     }, 
     hash: true, 
     template: 'src/pug/app.pug', 
     filetype: 'pug', 
     filename: 'index.html' 
    }), 
    extractScss 
    ] 
} 

process.traceDeprecation = false; 

export default config; 

我沒有看到在app.js捆綁任何CSS和進入點在設置完全一樣,所以可能它與HtmlWebpackPlugin本身有關係嗎?也許我不明白這是如何正確工作,我的配置是錯誤的。

我是新來的Webpack(來自Gulp),所以如果我的問題的答案似乎相當明顯,請耐心等待。

感謝您的幫助。

更新: 作爲參考,我的項目結構如下:

enter image description here

而且我會從我的.pug文件/pug/components/example.pug與像img(src="../images/example.jpg")路徑調用圖片。在用戶Tatsuyuki在下面建議的Webpack配置中刪除.pug作爲入口點之前,此工作正常。

回答

0

不要添加模板作爲來源:

app: [ 
    // path.resolve(__dirname, 'src/pug/app.pug'), 
    path.resolve(__dirname, 'src/js/app.js'), 
    path.resolve(__dirname, 'src/scss/app.scss') 
] 

相反,指定HtmlWebpackPlugin模板選項:

new HtmlWebpackPlugin({ 
    template: 'src/index.pug' 
}) 

Reference

+0

雖然這並從app.js刪除,現在.pug文件中的任何圖像引用都不會通過。即圖像標籤中的src等。那裏有什麼想法?謝謝。 –

+0

請說明資產的放置位置以及您如何引用它們。 –

+0

謝謝 - 我在底部更新了我的問題,並使用了我正在使用的路徑的項目結構和解釋的截圖。如果我運行dist或dev服務器,這些圖像不再被拾取。沒有錯誤或警告。 –