2016-10-23 49 views
5

我正在配置一個vue項目。我使用了webpack模板。 (npm install init webpack)。我在終端得到一個錯誤 -Vue 2.0設置路線 - 不要使用「新」副作用

ERROR in ./src/main.js 

✘ http://eslint.org/docs/rules/no-new Do not use 'new' for side effects 
/Users/uz067252/Documents/Development/Vue/workex/vue-project/src/main.js:21:1 
new Vue({ 
^ 


✘ 1 problem (1 error, 0 warnings) 


Errors: 
1 http://eslint.org/docs/rules/no-new 

這裏的main.js

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

import VueRouter from 'vue-router' 
import VueResource from 'vue-resource' 

// We want to apply VueResource and VueRouter 
// to our Vue instance 
Vue.use(VueResource) 
Vue.use(VueRouter) 

// Pointing routes to the components they should use 
var router = new VueRouter({ 
routes: [ 
    { path: '/hello', component: Hello }, 
    { path: '*', redirect: '/hello' } 
] 
}) 

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

感謝

回答

11

該錯誤來自您的eslint代碼格式化程序,而不是來自Vue.js本身。

您的webpack環境被配置爲驗證代碼,然後構建並啓動您的應用程序。雖然這樣做,你的eslint發出警告。

爲了避免它,做如下(在過去的5條線路的main.js文件):

new Vue({ // eslint-disable-line no-new 
    el: '#app', 
    router: router, 
    render: h => h(App) 
}) 

你在做什麼上面只在上面一行是禁止eslint預警new 。現在你的webpack會正常啓動你的應用程序。

另一種方法是在.eslintrc.js(位於項目根文件夾中)中設置規則,您可以在其中指定no-new規則應該被忽略。 (在這種情況下不推薦)

+0

我怎樣才能去除短絨從我的項目? – dotslash

+0

如果你正在使用webpack模板('vue init webpack my-project')開始一個新項目,你會得到一個選項「Use ESLint lint your code?」,你可以在其中回答「n」或no。如果你有一個你想關閉linter的現有項目,你可以嘗試這個討論中的建議:https://github.com/vuejs-templates/webpack/issues/73 – Mani

+0

我有一個現有的項目,以及我所做的是將我的'.eslintignore'改爲'* .js'。那就是現在的技巧! :-P – dotslash

3

你是不是分配new Vue(...)聲明的任何東西的價值。

A new語句創建一個對象的新實例。通常這個實例被分配給一個變量。如果您沒有將該實例分配給一個變量,那麼它將被垃圾收集。

linter認爲,由於您沒有保留對新實例的引用,因此您依賴於操作的副作用,這是一種不好的做法。一個副作用的例子是如果new操作修改了全局變量的值。

0

這種班輪規則很有用也很重要。如果你使用任何框架 - 例如VUE - 它們使用新的運營商的副作用,嘗試通過anonimous功能覆蓋添加三個括號

(()=>code)(); 

在你的代碼

(()=>new Vue({ // no linter directive need anymore 
    el: '#app', 
    router: router, 
    render: h => h(App) 
}))();