2017-01-08 44 views
8

Próbuję użyć font-awesome w prostej aplikacji Vue stworzonej przy użyciu vue-cli przy użyciu szablonu Webpack-simple, ale jest to trudne.Używaj font-awesome w aplikacji Vue stworzonej przy użyciu vue-cli Webpack

zainstalowałem font-niesamowite użyciu npm install font-awesome --save i importowanych go w moich js wejście (main.js)

import Vue from 'vue' 
import App from './App.vue' 
import VueRouter from 'vue-router'; 
import Home from "./components/Home.vue" 

Vue.use(VueRouter); 

import 'font-awesome/css/font-awesome.css'; 

const routes = [ 
    { path: '/', component: Home } 
]; 

const router = new VueRouter({ 
    routes, 
    mode: 'history' 
}); 

new Vue({ 
    el: '#app', 
    router, 
    render: h => h(App) 
}) 

To jest mój obecny plik 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' 
    }, 
    module: { 
    rules: [ 
     { 
     test: /\.vue$/, 
     loader: 'vue-loader', 
     options: { 
      loaders: { 
      // Since sass-loader (weirdly) has SCSS as its default parse mode, we map 
      // the "scss" and "sass" values for the lang attribute to the right configs here. 
      // other preprocessors should work out of the box, no loader config like this nessessary. 
      'scss': 'vue-style-loader!css-loader!sass-loader', 
      'sass': 'vue-style-loader!css-loader!sass-loader?indentedSyntax' 
      } 
      // other vue-loader options go here 
     } 
     }, 
     { 
     test: /\.js$/, 
     loader: 'babel-loader', 
     exclude: /node_modules/ 
     }, 
     { 
     test: /\.(png|jpg|gif|svg)$/, 
     loader: 'file-loader', 
     options: { 
      name: '[name].[ext]?[hash]' 
     } 
     }, 
     { 
     test: /\.woff(\?v=\d+\.\d+\.\d+)?$/, 
     loader: "url?limit=10000&mimetype=application/font-woff" 
     }, { 
     test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/, 
     loader: "url?limit=10000&mimetype=application/font-woff" 
     }, { 
     test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, 
     loader: "url?limit=10000&mimetype=application/octet-stream" 
     }, { 
     test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, 
     loader: "file" 
     }, { 
     test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, 
     loader: "url?limit=10000&mimetype=image/svg+xml" 
     } 
    ] 
    }, 
    resolve: { 
    alias: { 
     'vue$': 'vue/dist/vue.common.js' 
    } 
    }, 
    devServer: { 
    historyApiFallback: true, 
    noInfo: true 
    }, 
    performance: { 
    hints: false 
    }, 
    devtool: '#eval-source-map' 
} 

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 
    }) 
    ]) 
} 

już próbował zmienić ładowarki czcionek na:

{ 
    test: /\.(png|jpe|jpg|gif|woff|woff2|eot|ttf|svg)(\?.*$|$)/, 
    loader: 'file-loader', 
    options: { 
     name: '[name].[ext]?[hash]' 
    } 
} 

Ale obie konfiguracje rzucają sam błąd:

ERROR in ./~/font-awesome/css/font-awesome.css 
Module parse failed: /home/james/projects/app/node_modules/font-awesome/css/font-awesome.css Unexpected character '@' (7:0) 
You may need an appropriate loader to handle this file type. 
| /* FONT PATH 
| * -------------------------- */ 
| @font-face { 
| font-family: 'FontAwesome'; 
| src: url('../fonts/fontawesome-webfont.eot?v=4.7.0'); 
@ ./src/main.js 11:0-43 
@ multi main 

Po pewnym google, znalazłem kilka linków (here, here i here na przykład), ale każdy z nich pracuje dla mnie, błąd jest zawsze taka sama.

Co to jest zalecany program ładujący do obsługi świetnych plików? Myślę, że problem tkwi w ładowarce, ponieważ wszystkie wyrażenia wyrażeń regularnych wyglądają dobrze dla mnie.

Aby uzyskać więcej informacji, poniżej znajduje wersje w package.json:

"dependencies": { 
    "bulma": "^0.3.0", 
    "font-awesome": "^4.7.0", 
    "vue": "^2.1.0", 
    "vue-resource": "^1.0.3", 
    "vue-router": "^2.1.1" 
    }, 
    "devDependencies": { 
    "babel-core": "^6.0.0", 
    "babel-loader": "^6.0.0", 
    "babel-preset-es2015": "^6.0.0", 
    "cross-env": "^3.0.0", 
    "css-loader": "^0.25.0", 
    "file-loader": "^0.9.0", 
    "style-loader": "^0.13.1", 
    "vue-loader": "^10.0.0", 
    "vue-template-compiler": "^2.1.0", 
    "webpack": "^2.1.0-beta.25", 
    "url-loader": "^0.5.5", 
    "webpack-dev-server": "^2.1.0-beta.9" 
    } 

Odpowiedz

3

Wydaje trzeba to ładowarka na .css w konfiguracji WebPACK:

{ 
    test: /\.css$/, 
    loader: 'css-loader' 
    }, 
+0

Może "css-loader" tylko niewystarczająco. Możesz wypróbować 'loader: 'style-loader! Css-loader'' lub' loader:' style-loader! Css-loader? SourceMap'' (z mapami źródłowymi). –

+0

Dzięki za odpowiedź. Próbowałem tego teraz, ale to nie działa. Zainstalowałem 'npm install css-loader --save-dev' i dołączę twoją konfigurację sugestii, ale teraz otrzymuję błąd ' /home/james/Projects/app/node_modules/loader-runner/lib/loadLoader.js:35 \t \t Wyrzuć nowy błąd ("Moduł" "+ loader.path +" "nie jest programem ładującym (musi mieć funkcję normalną lub skoku)"); \t \t \t^ Błąd: Module '/home/james/Projects/app/node_modules/url/url.js' nie jest programem ładującym (musi mieć funkcję normalną lub funkcję pitch) '. Jakaś wskazówka? – James

+0

W konfiguracjach 'loader:', zamiast 'url', użyj' url-loader'. (Na przykład, zmień 'loader:" url? Limit = 10000' na 'loader:" url-loader? Limit = 10000'. Masz także plik 'loader: '', który powinien być' loader: 'file-loader "Zgodnie z twoim' pakiet.json', masz zainstalowane wszystkie ładowarki.Nie musisz instalować niczego innego.Ogólna wskazówka: użyj Webpack 1 podczas gdy Webpack 2 jest nadal w wersji beta (chyba, że ​​znasz już wystarczająco dużo Webpacka 1 lub masz dobry i mocny powód do korzystania z Webpack 2) –