zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    storm中DAU实时计算方案
    冒泡排序
    跨域
    关于java面试题
    vue+npm+Element插件+路由
    Android云端APP
    js图片预览带进度条
    jQuery上传文件显示进度条
    SSM+form表单文件上传
    SSM批量添加数据
  • 原文地址:https://www.cnblogs.com/kerry-xu/p/6357368.html
Copyright © 2011-2022 走看看