nodejs+webpack+vue之webpack

webpack是一款模块加载器兼打包工具,把JS、样式,图片都作为模块来使用和处理。项目下有个配置文件webpack.config.js,用来告诉webpack需要做什么,本项目的webpack.config.js文件内容如下:

引入模块:

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

入口文件及输出文件配置:

通过entry节点可以配置入口文件,且支持多个入口文件,每个模板只会有一个入口文件。

通过oupput节点可以配置输出文件,输出文件的文件名是根据入口文件来配置的,[name]的相应内容是entry节点下对应该的key,如下,则会输出/dist/builg.index.js和dist/build.user.js两个文件。

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

模块加载器:

它告知webpack每一种文件都需要使用什么加载器来处理,常用的加载器有style-loader,css-loader,sass-loader,url-loader;

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

别名设置:

设置别名后,就不需要写真实的路径,只需用别名代替,如:require('httpHelper')。

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

posted @ 2017-01-29 20:13  白色斑马线  阅读(6562)  评论(1编辑  收藏  举报