Vue 2.0设置路线 - 不要将'new'用于副作用

use*_*svm 11 javascript node.js vue.js

我正在配置一个vue项目.我使用了webpack模板.(npm install init webpack).我在终端收到错误 -

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
Run Code Online (Sandbox Code Playgroud)

这是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)
})
Run Code Online (Sandbox Code Playgroud)

谢谢

Man*_*ani 18

该错误来自您的eslint代码格式化程序,而不是来自Vue.js本身.

您的webpack环境配置为在构建和启动应用程序之前验证代码.在这样做的同时,你的意图发出了警告.

要避免它,请执行以下操作(在main.js文件的最后5行中):

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

您上面所做的是new仅在上面的行中禁用eslint警告.现在您的webpack将正常启动您的应用程序.

另一个选项是在.eslintrc.js(在项目根文件夹中)设置规则,您可以在其中指定no-new应忽略该规则.(在这种情况下不推荐)


Luc*_*vet 8

您也可以设置vm var并分别安装

var vm = new Vue({router, render: h => h(App)})
vm.$mount('#app')
Run Code Online (Sandbox Code Playgroud)

参考:https : //vuejs.org/v2/api/#vm-mount


Jac*_* A. 5

您没有将new Vue(...)语句的值赋给任何东西.

一个new语句创建一个对象的新实例.通常,此实例将分配给变量.如果未将实例分配给变量,则会对其进行垃圾回收.

linter假设,由于你没有保留对新实例的引用,你依赖于操作的副作用,这是一种不好的做法.副作用的一个例子是如果new操作修改了全局变量的值.


sar*_*oka 5

此划线规则是有用且重要的。如果使用任何使用new运算符副作用的框架(例如Vue),请通过添加三个括号将其包装在匿名函数中

(()=>code)();
Run Code Online (Sandbox Code Playgroud)

在你的代码中

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

  • 是的,我更喜欢这种解决方案,而不是重新定向棉绒。到目前为止似乎似乎没有任何意外的结果-可能不会。 (2认同)