soo*_*oon 9 javascript vue.js vuejs2
我使用创建项目vue-cli 3.0。最初它运行正常。但之后我<ctrl>-c再nom run serve再次,它不断抛出的错误:
未捕获到的SyntaxError:意外令牌<
它指示错误发生在的第一行app.js,但是我在控制台中检出的<实际来自index.html。这意味着在此过程中的某个地方,webpack思想index.html应该像那样被传递app.js。
以下是我正在使用的软件包:
vue 3.0.0-rc.3 @ vue / cli-plugin-babel ^ 3.0.0-beta.15 @ vue / cli-plugin-eslint ^ 3.0.0-beta.15 @ vue / cli-service ^ 3.0.0 -beta.15
我该如何解决?
Update01
我一次又一次删除了整个node-modules文件夹npm install,然后一切似乎都正常了。但是,如果有人知道为什么会发生这种情况,请分享。
Ran*_*mar 18
您可能在index.html 的src属性中为相对路径使用了“./”前缀,只需将其替换为“<%= BASE_URL %>”即可。
//<script src="./js/config.js">
<script src="<%= BASE_URL %>js/config.js">
Run Code Online (Sandbox Code Playgroud)
这种“./”用法不会对普通 Vue 路由造成任何问题,但是当您实现动态路由匹配 ({ path: '/user/:id', component: User }) 时,您在 index.html 中的引用为“ ./"前缀不会按预期工作!
这是因为 Vue 文件结构会将您的依赖项放在您的路由文件夹中,例如
user/js/config.js
Run Code Online (Sandbox Code Playgroud)
这个结构是一样的,即使你的路由有路由参数(http://yourdomain.com/user/1234),因为你实现了动态路由匹配并使用相同的 Vue 组件(User.vue)。
此时,"./"可能指向user/1234/js/config.js,因此它最终会转到默认的 404 页面,并且它是一个以"< html >"开头的 HTML 文件,因此您将获得"Uncaught SyntaxError: Unexpected token <"在您引用的文件的第 1 行中。
// vue.config.js
module.exports = {
publicPath: '/',
};
Run Code Online (Sandbox Code Playgroud)
您实际上想将 publicPath 添加到您的 vue.config.js 文件中
如果您的应用程序部署在http://example.com,则/sf/answers/3942467511/确实有效
如果您将其部署在http://example.com/something
然后你需要在部署时进入并更改它,至少可以说很烦人。
使用 vue.config.js 文件就这样设置
// vue.config.js
module.exports = {
publicPath: process.env.NODE_ENV === 'production'
? '/something/'
: '/'
};
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,我尝试删除节点模块并再次安装npm,但这没有用。
所做的工作是删除所有站点数据。您可以打开Chrome浏览器中的开发标签(Ctrl + Shift + i),然后转到“应用程序”标签,然后点击清除网站数据,以执行此操作。
我的猜测是,我仍然有一些老服务员来拦截请求并提供html文件而不是app.js。因此,如果您之前在网址“ http:// localhost:8080 ”上使用了PWA,则可能会解决此问题。
我也有同样的问题。在 index.html 文件中,我只写了这个脚本标签,就像这样:
<script src="./static/js/qrcode.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
如果我像这样更改 src attr:
<script src="/static/js/qrcode.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
好的,没有错误“意外令牌<”显示。
这里发生了另一个问题,这让我很沮丧。
显示我无法访问此站点并获取资源的在线构建产品测试。我的天啊 !好的,我再次更改此 src 如下:
<script src="./static/js/qrcode.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
然后在 vue.config.js 中进行一些更改,如下所示:
baseUrl:'./'
assetsDir:'./'
Run Code Online (Sandbox Code Playgroud)
所以,在线一切正常,但在我的本地项目中运行它会得到这个错误。
最后,我发现这个:
在线网址:http : //xxxxx.cn/test0001/#/
本地url地址:http : //192.168.5.108 : 9000/test0001/#/
(ps:test0001 参数无法删除,我的项目需要它)
如果我删除此参数“test0001”,则此错误不会显示在我的本地项目 test 中。
我猜构建和开发环境的差异导致了这个错误,我的参数 test0001 在 url 地址中。
最后,我只是使用一个参数来区分这个产品和开发来解决它。
如果有人像我一样遇到这个问题,请分享您的解决方案。
我假设您使用的是与用于vue ui或vue create启动项目相同的控制台窗口?
然后尝试打开一个新的控制台实例并在其中运行您的项目。
就我而言,它有效,问题是第一个控制台中的环境变量被覆盖。
祝你好运!