从零开始搭建 Vue 项目

本文主要介绍如何使用 node 搭建一个基于 Vue + Vue Router + iView + webpack 的项目,阅读本文之前你可能需要知道:

  • ES6
  • Vue
  • Vue Router
  • iView
  • webpack中文文档
  • eslint
  • stylelint

以上知识在在本文中不会做太多的介绍,不太熟悉的朋友建议事先了解一下再阅读本文。
项目 github 地址点击这里

1. 初始化

md vue-project && cd vue-project
git init
git remote add origin https://github.com/Unfantasy/vue-project
git pull origin master
npm init

git init 初始化 git。
npm init 之后根据它的提示创建 package.json,当然你也可以什么都不输入直接 enter 之后手动改 package.json 的内容也是可以的。

1.png

2. 准备

添加 webpack,Vue,Vue Router,iView等一系列开发包

npm i vue iview vue-router
npm install webpack webpack-dev-server webpack-cli -D

3. 编写代码

主要是编写 webpack 配置文件和 js 入口文件
webpack.config.js

require('babel-polyfill'); // es6-polyfill
const path = require('path');
const autoprefixer = require('autoprefixer');
const postcssPresetEnv = require('postcss-preset-env');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
  devtool: 'source-map', // 开启 source-map, 生产环境的时候建议关掉提升打包效率
  mode: 'development',
  devServer: { // webpack-dev-server 服务配置
    host: '0.0.0.0',
    port: '8000',
  },
  entry: './src/entry', // 入口位置
  output: { // 输出文件配置
    filename: 'index.js',
    path: path.resolve(__dirname, 'dist'),
    publicPath: '/dist/'
  },
  module: { // loader 配置
    rules: [
      {
        test: /\.js$/,
        include: [
          path.resolve(__dirname, 'src')
        ],
        exclude: /node_modules/,
        loader: 'babel-loader',
      },
      {
        test: /\.vue$/,
        include: [
          path.resolve(__dirname, 'src')
        ],
        exclude: /node_modules/,
        loader: 'vue-loader',
      },
      {
        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          // name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
        }
      },
      {
        test: /\.(png|jpg|gif|svg)$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 8192
            }
          }
        ]
      },
      {
        test: /\.(c|sc|sa)ss$/,
        include: [
          path.resolve(__dirname, 'src'),
          path.resolve(__dirname, 'node_modules')
        ],
        // exclude: /node_modules/,
        use: [
          'style-loader',
          { loader: 'css-loader', options: { importLoaders: 2 } },
          {
            loader: "postcss-loader",
            options: {
              ident: 'postcss',
              plugins: () => [
                postcssPresetEnv(),
                // require('postcss-import')(),
                autoprefixer('last 2 versions')
              ]
            },
          },
          'sass-loader'
        ]
      }
    ],
  },
  externals: { 
    // 'react': 'React',
    // 'react-dom': 'ReactDOM'
  },
  resolve: {
    modules: ['node_modules', path.join(__dirname, '../node_modules')],
    extensions: ['.vue', '.wasm', '.mjs', '.js', '.json']
  },
  plugins: [ // 一些其他的插件
    new MiniCssExtractPlugin({
      // Options similar to the same options in webpackOptions.output
      // both options are optional
      filename: 'index.css',
    })
  ]
};

index.js

import Vue from 'vue';
import VueRouter from 'vue-router';
import iView from 'iview';
import 'iview/dist/styles/iview.css';
import router from './router';
import App from './app';

Vue.use(VueRouter);
Vue.use(iView);

new Vue({
  router,
  render: h => h(App)
}).$mount('#app');

router.js

import VueRouter from 'vue-router';
import Index from '../pages/index/index.vue';
import Index2 from '../pages/index2/index.vue';

const routes = [
  { path: '/index', component: Index },
  { path: '/', component: Index },
  { path: '/index2', component: Index2 },
]

const router = new VueRouter({
  routes,
});

export default router;

app.vue


4. 添加 lint

eslintstylelint 这些代码检查工具可以帮助我们更好,更规范的写代码,所以一般情况下建议加上。lint 的一些规则这里就不再贴出来,具体想看的可以去 github 里面自行查看
最后把最终的 package.json 贴出来,这是加了 webpackeslintstylelint 之后的。
package.json

{
  "name": "vue-project",
  "version": "1.0.0",
  "description": "从零开始搭建一个基于 Vue 的项目",
  "main": "index.js",
  "scripts": {
    "start": "webpack-dev-server --color --hot",
    "build": "webpack --mode=production",
    "dev": "webpack --mode=development"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/Unfantasy/vue-project.git"
  },
  "author": "Unfantasy",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/Unfantasy/vue-project/issues"
  },
  "homepage": "https://github.com/Unfantasy/vue-project#readme",
  "dependencies": {
    "iview": "^3.1.0",
    "vue": "^2.5.17",
    "vue-router": "^3.0.1"
  },
  "devDependencies": {
    "autoprefixer": "^9.1.3",
    "babel-core": "^6.26.3",
    "babel-eslint": "^9.0.0",
    "babel-loader": "^7.1.5",
    "babel-polyfill": "^6.26.0",
    "babel-preset-env": "^1.7.0",
    "babel-preset-react": "^6.24.1",
    "css-loader": "^1.0.0",
    "eslint": "^5.4.0",
    "eslint-config-airbnb": "^17.1.0",
    "eslint-plugin-import": "^2.14.0",
    "eslint-plugin-jsx-a11y": "^6.1.1",
    "eslint-plugin-react": "^7.11.1",
    "file-loader": "^2.0.0",
    "mini-css-extract-plugin": "^0.4.2",
    "node-sass": "^4.9.3",
    "postcss-loader": "^3.0.0",
    "postcss-preset-env": "^5.3.0",
    "sass-loader": "^7.1.0",
    "style-loader": "^0.23.0",
    "stylelint": "^9.5.0",
    "stylelint-config-standard": "^18.2.0",
    "stylelint-scss": "^3.3.0",
    "url-loader": "^1.1.1",
    "vue-loader": "^14.2.3",
    "vue-template-compiler": "^2.5.17",
    "webpack": "^4.17.2",
    "webpack-cli": "^3.1.0",
    "webpack-dev-server": "^3.1.7"
  }
}

你可能感兴趣的:(从零开始搭建 Vue 项目)