云中客

梦想有多大,就能走多远

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

Nodejs与包管理工具安装:

Windows安装:

https://nodejs.org/en/

下载安装包安装就可以。

 

Ubuntu安装:

//安装nodejs
sudo apt-get install nodejs
//安装包管理工具
sudo apt-get install npm

安装结果确认:

~/dev/devtest$ node --version
v8.11.1
~/dev/devtest$ npm --version
5.8.0

 

快捷通道(Vue-cli方法):

    //设置npm仓库镜像为国内淘宝镜像
    npm config set registry https://registry.npm.taobao.org
    //查看配置是否成功
    npm config get registryf
    //全局安装 webpack
    npm install -g webpack
    //全局安装 vue-cli
    npm install -g vue-cli
    //创建一个基于webpack模板的项目
    vue init webpack my-project
    
    cd my-project
    npm install
    //这一步看着简单,实际上都在配置文件里面配好了,可以去研究一下
    npm run dev

自动生成的目录结构:

手动设置:

1,初始化与安装WebPack

 

// 进入文件夹,初始化设置
npm init -y

// Webpack和服务器安装
npm i webpack webpack-cli webpack-dev-server --save-dev

 

2,添加简单代码测试

webpack.config.js:

const path = require('path');
module.exports = {
 entry: './src/index.js',
 output: {
 filename: 'bundle.js',
 path: path.join(__dirname, 'dist')
 },
 devServer: {
 contentBase: path.join(__dirname, 'dist')
 },
}

dist/index.html:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title></title>
</head>
<body>
 Hello World
</body>
</html>

src/index.js 空文件

启动确认:

 npx webpack-dev-server 

 

 

3, 引入Vue

// VUE安装
npm i vue --save

// VUE单独文件处理的Loader安装
npm i vue-loader vue-template-complier vue-style-loader css-loader --save-dev

Vue单文件组件与Loader设置

//webpack.config.js

const path = require('path');
const VueLoaderPlugin = require('vue-loader/lib/plugin');

module.exports = {
    mode: 'development',
    entry: './src/index.js',
    output: {
        filename: 'bundle.js',
        path: path.join(__dirname, 'dist')
    },
    resolve: {
        alias: {
            'vue$': 'vue/dist/vue.esm.js'
        }
    },
    module: {
        rules: [{
                test: /\.css$/,
                use: [
                    'vue-style-loader',
                    'css-loader'
                ]
            },
            {
                test: /\.vue$/,
                loader: 'vue-loader',
                options: {
                    loaders: {
                        'scss': [
                            'vue-style-loader',
                            'css-loader',
                            'sass-loader'
                        ],
                        'sass': [
                            'vue-style-loader',
                            'css-loader',
                            'sass-loader?indentedSyntax'
                        ]
                    }
                }
            }
        ]
    },
    devServer: {
        contentBase: path.join(__dirname, 'dist')
    },
    plugins: [
        new VueLoaderPlugin()
    ],
    devtool: '#eval-source-map'
}

 

4,Vue单文件组件测试

<!-- dist/index.html-->
<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <script src="./bundle.js"></script>
 <title></title>
</head>
<body>
 <div id="app"></div>
</body>
</html>
// src/index.js

import Vue from 'vue';
import App from './components/App.vue';

window.onload = function() {
    new Vue({
        el: '#app',
        template: '<app></app>',
        components: { App }
    })
}
//src/components/App.vue

<template>
    <div>
        <header-component></header-component>
        <p class="blue">This is App component.</p>
    </div>
</template>

<script>
import Header from './Header.vue';

export default {
    components:{
        'header-component':Header
    }
}
</script>

<style>
.blue{
    color: blue;
}
</style>
//src/components/Header.vue

<template>
    <div>
        <p class="title">{{title}}</p>
    </div>
</template>

<script>
export default {
    data:function(){
        return{
            title:'This is Header component'
        }
    }
}
</script>

<style>
.title{
    font-size: 20px;
    font-weight: bold;
}
</style>

启动服务查看结果:

 

 

webpack.config.js说明:

//修改webpack.config.js
var path = require('path');
var webpack = require('webpack');

module.exports = {
    entry: './src/main.js', // 项目的入口文件,webpack会从main.js开始,把所有依赖的js都加载打包
    output: {
        path: path.resolve(__dirname, './dist'), // 项目的打包文件路径
        publicPath: '/dist/', // 通过devServer访问路径
        filename: 'build.js' // 打包后的文件名
    },
    devServer: {
        historyApiFallback: true,
        overlay: true
    }
};

//修改package.josn
//webpack-dev-server会自动启动一个静态资源web服务器 --hot参数表示启动热更新
"scripts": {
    "dev": "webpack-dev-server --open --hot",
    "build": "webpack --progress --hide-modules"
  },

//运行
//浏览器自动打开的一个页面,随意修改js,浏览器会自动刷新
npm run dev

//编译
npm run build

Load配置说明:

//webpack默认不支持转码es6,但是import export这两个语法却单独支持
//webpack默认只支持js的模块化,如果需要把其他文件也当成模块引入,就需要相对应的loader解析器//webpack.config.js
var path = require('path');
var webpack = require('webpack');

module.exports = {
    entry: './src/main.js',
    output: {
        path: path.resolve(__dirname, './dist'),
        publicPath: '/dist/',
        filename: 'build.js'
    },
    devServer: {
        historyApiFallback: true,
        overlay: true
    },
    resolve: {
        alias: {
            'vue$': 'vue/dist/vue.esm.js'
        }
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                use: [
                    'vue-style-loader',
                    'css-loader'
                ],
            }
        ]
    }
};

//匹配后缀名为css的文件,然后分别用css-loader,vue-style-loader去解析 解析器的执行顺序是从下往上(先css-loader再vue-style-loader)
//我们这里用vue开发,所以使用vue-style-loader,其他情况使用style-loader

打包发布:

// 对文件进行压缩,缓存,分离等等优化处理//修改package.json
"scripts": {
    "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot",
    "build": "cross-env NODE_ENV=production webpack --progress --hide-modules"
}

//修改webpack.config.js,判断NODE_ENV为production时,压缩js代码
var path = require('path');
var webpack = require('webpack');

module.exports = {
    // 省略...
}

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(),
    ])
  }
  
module: {
        //加载器配置
        loaders: [
            //.css 文件使用 style-loader 和 css-loader 来处理
            { test: /\.css$/, loader: 'style-loader!css-loader' },
            //.js 文件使用 jsx-loader 来编译处理
            { test: /\.js$/, loader: 'jsx-loader?harmony' },
            //.scss 文件使用 style-loader、css-loader 和 sass-loader 来编译处理
            { test: /\.scss$/, loader: 'style!css!sass?sourceMap'},
            //图片文件使用 url-loader 来处理,小于8kb的直接转为base64
            { test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'}
        ]
    }

 

posted on 2018-07-11 12:56  走遍江湖  阅读(2058)  评论(0编辑  收藏  举报