webpack.config.js
const { resolve } = require('path') const webpack = require('webpack') const HtmlWebpackPlugin = require('html-webpack-plugin') const url = require('url') const publicPath = '' var ExtractTextPlugin=require('extract-text-webpack-plugin');//build使用 module.exports = (options = {}) => ({ entry: { vendor: './src/vendor', index: ['babel-polyfill','./src/main.js']//ES6的语法兼容 }, output: { path: resolve(__dirname, 'dist'), filename: options.dev ? '[name].js' : '[name].js?[chunkhash]', chunkFilename: '[id].js?[chunkhash]', publicPath: options.dev ? '/assets/' : publicPath }, module: { rules: [{ test: /.vue$/, use: ['vue-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'
}
}
},//解决页面的scss文件不能解析的问题
{ test: /.js$/, use: ['babel-loader'], exclude: /node_modules/ }, { test: /.html$/, use: [{ loader: 'html-loader', options: { root: resolve(__dirname, 'src'), attrs: ['img:src', 'link:href'] } }] }, // { // test:/.css$/, // use:ExtractTextPlugin.extract({ // fallback:'style-loader', // use:'css-loader' // }) // }, // { // test:/.scss$/, // loader:ExtractTextPlugin.extract({ // fallback:'style-loader', // use:'css-loader!sass-loader' // }) // }, { test: /.css$/, use: ['style-loader', 'css-loader', 'postcss-loader'] }, { test: /.scss$/, exclude:/node_modules/, use: ['style-loader', 'css-loader', 'postcss-loader','sass-loader'] }, { test: /favicon.png$/, use: [{ loader: 'file-loader', options: { name: '[name].[ext]?[hash]' } }] }, { test: /.(png|jpg|jpeg|gif|eot|ttf|woff|woff2|svg|svgz)(?.+)?$/, exclude: /favicon.png$/, use: [{ loader: 'url-loader', options: { limit: 100000, name:'img/[name].[ext]?[hash]' } }] } ] }, plugins: [ new webpack.optimize.CommonsChunkPlugin({ names: ['vendor', 'manifest'] }), // new ExtractTextPlugin({ // filename:'[name].css', // disable:false, // allChunks:true // }), new HtmlWebpackPlugin({ template: 'src/index.html' }) ], externals:{//抽离第三方库 /*"vue":"window.Vue", "vue-router":"window.VueRouter"*/ }, resolve: { alias: { '~': resolve(__dirname, 'src') } }, devServer: { host: '127.0.0.1', port: 9001, proxy: { '/gonghui/': { target: 'http://172.16.81.36', secure: false, changeOrigin: true, pathRewrite: { '^/gonghui': 'gonghui' } } }, historyApiFallback: { index: url.parse(options.dev ? '/assets/' : publicPath).pathname } }, devtool: options.dev ? '#eval-source-map' : '#source-map' })
.babelrc
{ "presets": [ ["es2015", { "modules": false }] ] }
postcss.config.js
module.exports = { plugins: [ require('autoprefixer')() ] }
package.json
{ "name": "element-starter", "description": "A Vue.js project", "author": "yi.shyang@ele.me", "private": true, "scripts": { "dev": "webpack-dev-server -d --inline --hot --env.dev", "build": "rimraf dist && webpack -p --progress --hide-modules","dele": "rm -rf node_modules" }, "dependencies": { "body-parser": "^1.17.2", "element-ui": "^1.1.2", "vue": "^2.3.4", "vue-router": "^2.4.0" }, "engines": { "node": ">=6" }, "devDependencies": { "autoprefixer": "^6.6.0", "babel-core": "^6.21.0", "babel-eslint": "^7.1.1", "babel-loader": "^6.4.0",
"babel-polyfill": "^6.26.0", "babel-preset-es2015": "^6.13.2", "css-loader": "^0.27.0", "eslint": "^3.12.2", "eslint-config-enough": "^0.2.2", "eslint-loader": "^1.6.3", "extract-text-webpack-plugin": "^2.1.0", "file-loader": "^0.10.1", "html-loader": "^0.4.5", "html-webpack-plugin": "^2.24.1", "node-sass": "^4.5.2", "postcss-loader": "^1.3.3", "rimraf": "^2.5.4", "sass-loader": "^6.0.3", "style-loader": "^0.13.2", "url-loader": "^0.5.8", "vue-loader": "^11.1.4", "vue-template-compiler": "^2.1.8", "webpack": "^2.2.0-rc.4", "webpack-dev-server": "2.1.0-beta.12" } }