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
    })
  ])
}
时间: 2024-12-15 01:52:26

nodejs+webpack+vue之webpack的相关文章

webpack+vue搭建基础

使用webpack工具打包vue+es6项目现在是前端很火的一个技术.今天大体介绍下自己在搭建过程中的问题: 步骤:在cmd命令行下操作 1.安装nodejs , 路径:www.nodejs.org,一路默认安装即可,目前最新的nodejs包已经涵盖了npm,所以不用另行安装npm: 2.安装cnpm,为了加快安装速度,我们可安装淘宝镜像服务器,对我们所依赖的modules进行安装:npm install -g cnpm --registry=https://registry.npm.taoba

vue+node+webpack搭建环境

一.环境搭建 1.1.去官网安装node.js( http://www.runoob.com/nodejs/nodejs-install-setup.html  ) 注意node的版本,只有支持和谐模式的node才会支持es6,在基于webpack构建项目名称时才不会报错.推荐最新版本. 下载安装包之后直接点击安装即可.测试安装成功的界面如下: 1.2.利用npm安装webpack 命令行语句为npm install webpack -g  .测试安装成功的界面如下: 1.3.下面就是安装淘宝镜

详解webpack + vue + node 打造单页面(入门篇)

1.node下载地址:http://nodejs.cn/download/,安装完成检查node和npm版本 2.淘宝镜像 : npm install cnpm -g --registry=https://registry.npm.taobao.org ,淘宝镜像比npm要快很多,可以直接用cnpm代替npm 3.安装vue-cli:cnpm install -g vue-cli 安装webpack:cnpm install -g webpack -g 表示全局安装 编程过程中需要引入模块的话可

vue 一些webpack的配置详解

最近一直在忙着做项目 本来想养成一个经常跟新博客的习惯 , 但是实在是太难了 , 每天加班到10点多 .8点能下班都是最好的了 , 小公司真不好待呀 分享一下最近半年的vue心得吧 我的项目是在他的基础上改的 PanJiaChen/vueAdmin-template vuex 咋web上我觉得是鸡肋 , 用户刷新页面直接就没了........... 这是我的目录 , 现在我遇到一个瓶颈  , 就是如何优化 build 的速度问题 , 这个问题随着页面原来越多已经发展到越来越恐怖的地方了现在打包一

webpack+vue+iview使用vue-cli脚手架搭建

1.安装nodejs环境 下载node.js.安装成功后再控制台输入 node -v 出现版本号则,安装成功. 如果没有出现 版本号 而是出现node 不是内部命令的话 需要配置一下环境变量,如果已经出现版本号,此步骤可以忽略.将安装node的路径剪切,右键我的电脑-->属性-->高级系统环境设置-->环境变量-->找到path环境变量.加上复制的node的安装路径. 2.可以在控制台在输入一下命令,查看是否已经成功的安装了npm   npm -v  如果出现版本号说明已经安装成功

怎样通过已经使用过webpack+vue+vueRouter+vuecli的配置文件package.json创建一个项目

首先,我们自己得手动创建一个webpack+vue+vueRouter+vuecli工程,执行下面:如:新建一个vue项目,创建一个基于"webpack"的项目,项目名为vuedemo: $ vue init webpack vuedemo 安装完成后进入工程名称再根据原来项目的配置文件初始化 $ cd vuedemo $ npm install 但是由于在新建的时候对eslint的选择中选择了Yes,所以后面根据配置package.json的时候,发现没有eslint-friendl

vue+ vue-router + webpack 踩坑之旅

说是踩坑之旅 其实是最近在思考一些问题 然后想实现方案的时候,就慢慢的查到这些方案   老司机可以忽略下面的内容了 1)起因  考虑到数据分离的问题  因为server是express搭的   自然少不了res.render("xx",data)    这句话的意思就是去查找相应的模板文件然后在用数据去渲染在将渲染好的页面去返回给浏览器,给浏览器去解析,渲染模板其实就是做的替换字符串+拼接字符串的活  各种的模板引擎也有各个优化的点(比如可以将对应的模板编译的函数保存在内存中,然后在通

Webpack系列:在Webpack+Vue中如何将对后端的http请求转到https的后端服务器中?

在上一篇文章(Webpack系列:在Webpack+Vue开发中如何调用tomcat的后端服务器的接口?)我们介绍了如何将对于webpack-dev-server的数据请求转发到后端服务器上,这在大部分情况下就够用了. 然后现在问题又来了,在生产环境下接口一般采用https协议,如果我们要把数据请求转发到生产服务器上怎么办? 首先会想是不是把上一篇博文中提到的proxyTable改成https就可以了,如下:     proxyTable: {                '/appserve

vue.js webpack搭建开发环境

国内推荐用 cnpm 下载 npm 太慢了 1, 安装cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org 下载完之后 输入 cnpm -v 查看版本 2 安装vue脚手架 cnpm install -g vue-cli 3.初始化一个项目 vue init webpack my-project 填写项目名字 描述 作者 no no no .... 然后就会出现这些文件 4.下载依赖 成功后出现 node_这个文件