javascript - vue單頁面應用怎么把樣式抽取到一個獨立文件?
問題描述
問題是這樣的現(xiàn)在在做一個SAP應用,webpack配置了抽取文件出來。樣式既沒有抽取成一個文件也沒有被webpack打包到js里面,而是在頁面上生成style標簽了。求大神指教。用的是vue2,webpack2webpack配置:
var path = require(’path’)var vuxLoader = require('vux-loader');var webpack = require(’webpack’);var ExtractTextPlugin = require('extract-text-webpack-plugin');const webpackConfig = { entry: ’./src/main.js’, output: { path: path.resolve(__dirname, ’./dist’), publicPath: ’/dist/’, filename: ’build.js’ }, module: { rules: [ { test: /.vue$/, loader: ’vue-loader’, options: { loaders: { ’scss’: ’vue-style-loader!css-loader!sass-loader’, ’sass’: ’vue-style-loader!css-loader!sass-loader?indentedSyntax’ } } }, { test: /.js$/, loader: ’babel-loader’, exclude: /node_modules/ }, { test: /iview.src.*?js$/, loader: ’babel’ }, { test: /.css$/, use:new ExtractTextPlugin({ filename:’build.css’, ignoreOrder:true }).extract({ use:{ loader:’css-loader’, options:{modules:true } }, fallback:’style-loader’ }) }, { test: /.less$/, loader:’style-loader!css-loader!less-loader’ }, { test: /.(eot|woff|woff2|ttf)$/, loader: ’url-loader?limit=30000&name=[name]-[hash].[ext]’ }, { test: /.(png|jpg|gif|svg)$/, loader: ’file-loader’, options: { name: ’[name].[ext]?[hash]’ } } ] }, vue:{ loaders :{ css: ExtractTextPlugin.extract({fallback:’style-loader’, use:’css-loader’}) } }, resolve: { alias: { ’vue$’: ’vue/dist/vue.esm.js’ }, extensions: [’.js’, ’.vue’, ’.json’] }, devServer: { historyApiFallback: true, noInfo: true }, performance: { hints: false }, devtool: ’#eval-source-map’};module.exports = vuxLoader.merge(webpackConfig, {plugins:[’vux-ui’]});if (process.env.NODE_ENV === ’production’) { module.exports.devtool = ’#source-map’ // http://vue-loader.vuejs.org/en/workflow/production.html 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 }) ])}
package.json:
{ 'name': 'blog', 'description': 'leung blog mobile', 'version': '1.0.0', 'author': 'leung', 'private': true, 'scripts': { 'dev': 'cross-env NODE_ENV=development webpack-dev-server --open --hot --port 8082', 'build': 'cross-env NODE_ENV=production webpack --progress --hide-modules' }, 'dependencies': { 'vue': '^2.2.1' }, 'devDependencies': { 'axios': '^0.16.0', 'babel-core': '^6.0.0', 'babel-loader': '^6.0.0', 'babel-preset-latest': '^6.0.0', 'cross-env': '^3.0.0', 'css-loader': '^0.25.0', 'extract-text-webpack-plugin': '^2.1.0', 'file-loader': '^0.9.0', 'less-loader': '^4.0.3', 'node-sass': '^4.5.0', 'sass-loader': '^5.0.1', 'style-loader': '^0.16.1', 'url-loader': '^0.5.8', 'vue-loader': '^11.1.4', 'vue-router': '^2.3.1', 'vue-style-loader': '^3.0.1', 'vue-template-compiler': '^2.2.1', 'vuex': '^2.2.1', 'vux': '^2.2.1-rc.5', 'vux-loader': '^1.0.57', 'webpack': '^2.2.0', 'webpack-dev-server': '^2.2.0' }}
如果我把這段代碼注釋了就沒報錯了 T_T
vue:{ loaders :{ css: ExtractTextPlugin.extract({fallback:’style-loader’, use:’css-loader’}) } },
搞不懂,求賜教
問題解答
回答1:下面這個例子給你參考,希望對你有幫助
const path = require(’path’);const webpack = require(’webpack’);const ExtractTextPlugin = require('extract-text-webpack-plugin');const HtmlWebpackPlugin = require(’html-webpack-plugin’);module.exports = { entry: { main: ’./src/index.js’, vendor: [’vue’, ’vue-router’,’vuex’] }, output: { path: path.resolve(__dirname, ’dist’), publicPath: ’’, filename: ’js/build.js’ }, module: { rules: [{test: /.vue$/,use: [{ loader: ’vue-loader’, options: { loaders: { css: ExtractTextPlugin.extract({use: ’css-loader’,fallback: ’vue-style-loader’ }) }, }}] }, {test: /.(js|jsx)$/,use: [{ loader: ’babel-loader’,}],exclude: /node_modules/ }, {test: /.(png|jpg|gif|svg)$/,use: [{ loader: ’file-loader’, options: { name: ’images/[name].[ext]’ }}] } ] }, plugins: [ new webpack.optimize.CommonsChunkPlugin({ name: ’vendor’, filename: ’js/vendor.min.js’, }), new ExtractTextPlugin('css/style.css'), new HtmlWebpackPlugin({ template: ’public/index.html’ }) ], resolve: { alias: { ’vue$’: ’vue/dist/vue.esm.js’ } }, devServer: { contentBase: path.join(__dirname, 'dist'), stats: 'errors-only', port: 9000, 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 }) ])}
相關(guān)文章:
1. javascript - jquery怎么給select option一個點擊時觸發(fā)的事件,如圖 如果選擇自定義觸發(fā)一個時間?2. javascript - 怎樣限制同一個瀏覽器不能登錄兩個賬號3. nginx配置server模塊的問題4. java - android代碼重構(gòu):如何把app設置里的頭像UI做成通用的?5. 想找個php大神仿個網(wǎng)站。6. java - 新手做一個安卓視頻播放器,想實現(xiàn)一個進度條,按鈕那種在視頻下方懸浮的功能,不知道思路!7. javascript - angular和jquery都用到了$符號,一起用會不會沖突?8. css3 - Typecho 后臺部分表單按鈕在 Chrome 下出現(xiàn)靈異動畫問題,求解決9. mysql優(yōu)化 - 關(guān)于mysql分區(qū)10. 如何將行內(nèi)塊元素的內(nèi)容垂直水平兩個方向居中?
