nodejs+webpack+vue之webpack

webpack是一款模塊加載器兼打包工具,把JS、樣式,圖片都做爲模塊來使用和處理。項目下有個配置文件webpack.config.js,用來告訴webpack須要作什麼,本項目的webpack.config.js文件內容以下:css

引入模塊:html

var path = require('path')
var webpack = require('webpack')

入口文件及輸出文件配置:vue

經過entry節點能夠配置入口文件,且支持多個入口文件,每一個模板只會有一個入口文件。node

經過oupput節點能夠配置輸出文件,輸出文件的文件名是根據入口文件來配置的,[name]的相應內容是entry節點下對應該的key,以下,則會輸出/dist/builg.index.js和dist/build.user.js兩個文件。webpack

module.exports = {
//入口文件 entry: { index:
'./src/index.js', user:'./src/user.js' },
//輸出文件 output: { path: path.resolve(__dirname,
'./dist'), publicPath: '/dist/', filename: 'build.[name].js' } }

模塊加載器:es6

它告知webpack每一種文件都須要使用什麼加載器來處理,經常使用的加載器有style-loader,css-loader,sass-loader,url-loader;web

module.exports = {
    module: {
    rules: [
      {
//把vue文件輸出成組件 test:
/\.vue$/, loader: 'vue-loader', options: { loaders: { 'scss': ExtractTextPlugin.extract('vue-style-loader!css-loader!sass-loader'), 'sass': ExtractTextPlugin.extract('vue-style-loader!css-loader!sass-loader?indentedSyntax') } } }, {
     //將全部目錄下的es6代碼轉譯爲es5代碼,但不包含node_modules目錄下的文件 test:
/\.js$/, loader: 'babel-loader', exclude: /node_modules/ }, {
     //用於打包圖片 test:
/\.(png|jpg|gif|svg)$/, loader: 'file-loader', options: { name: '[name].[ext]?[hash]' } }, {
     //把scss文件轉譯成css文件 test:
/\.scss$/, loader:ExtractTextPlugin.extract({ fallbackLoader: 'style-loader', loader: 'css-loader!sass-loader' }) } ] } }

別名設置:npm

設置別名後,就不須要寫真實的路徑,只需用別名代替,如:require('httpHelper')。json

resolve: {
    alias: {
      'vue$': 'vue/dist/vue.common.js',
    'httpHelper': 'src/util/httpHelper.js'
} }

插件配置:瀏覽器

extract-text-webpack-plugin插件,不把樣式打包到腳本中,而是獨立打包樣式文件,生成新的css文件。

//樣式打包
var ExtractTextPlugin = require('extract-text-webpack-plugin');

plugins: [
new ExtractTextPlugin("./[name].css")
]

構建本地服務器:

該服務器基於node.js構建,可以讓瀏覽器監測代碼的修改,並自動刷新,默認端口爲‘8080’。

安裝:npm install --save-dev webpack-dev-server

devServer: {
    historyApiFallback: true,
    noInfo: true
}

判斷是生產環境仍是開發環境:

如下代碼中NODE_ENV的配置是與package.json文件下的scripts節點下的內容相關,module.exports.plugins裏的插件配置會合併到plugins:[new ExtractTextPlugin("./[name].css")]中。

if (process.env.NODE_ENV === 'production') {
  module.exports.devtool = '#source-map' 
  module.exports.plugins = (module.exports.plugins || []).concat([
    new webpack.DefinePlugin({
      'process.env': {
        NODE_ENV: '"production"'
      }
    }),
    new webpack.optimize.UglifyJsPlugin({
      sourceMap: true,
      compress: {
        warnings: false
      }
    }),
    new webpack.LoaderOptionsPlugin({
      minimize: true
    })
  ])
}

完整代碼以下:

var path = require('path')
var webpack = require('webpack')
//樣式打包
var ExtractTextPlugin = require('extract-text-webpack-plugin') module.exports = {
//入口文件配置 entry: { index:
'./src/index.js', user:'./src/user.js' },
//輸出文件配置 output: { path: path.resolve(__dirname,
'./dist'), publicPath: '/dist/', filename: 'build.[name].js' }, module: { rules: [ {
     //把vue文件輸出成組件 test:
/\.vue$/, loader: 'vue-loader', options: { loaders: { 'scss': ExtractTextPlugin.extract('vue-style-loader!css-loader!sass-loader'), 'sass': ExtractTextPlugin.extract('vue-style-loader!css-loader!sass-loader?indentedSyntax') } } }, {
     //將全部目錄下的es6代碼轉譯爲es5代碼,但不包含node_modules目錄下的文件 test:
/\.js$/, loader: 'babel-loader', exclude: /node_modules/ }, {
     //用於打包圖片 test:
/\.(png|jpg|gif|svg)$/, loader: 'file-loader', options: { name: '[name].[ext]?[hash]' } }, {
    //把scss文件轉譯成css文件 test:
/\.scss$/, loader:ExtractTextPlugin.extract({ fallbackLoader: 'style-loader', loader: 'css-loader!sass-loader' }) } ] }, resolve: {
  //設置別名 alias: {
'vue$': 'vue/dist/vue.common.js' } }, plugins: [
//樣式輸出路徑
new ExtractTextPlugin("./[name].css") ], devServer: { historyApiFallback: true, noInfo: true }, performance: { hints: false }, devtool: '#eval-source-map' } if (process.env.NODE_ENV === 'production') { module.exports.devtool = '#source-map' module.exports.plugins = (module.exports.plugins || []).concat([ new webpack.DefinePlugin({ 'process.env': { NODE_ENV: '"production"' } }), new webpack.optimize.UglifyJsPlugin({ sourceMap: true, compress: { warnings: false } }), new webpack.LoaderOptionsPlugin({ minimize: true }) ]) }

上一篇:nodejs+vue+webpack之項目概要

下一篇:nodejs+webpack+vue之node

相關文章
相關標籤/搜索