У меня есть приложение Vue.js, созданное с помощью Vue CLI 3. Он запускается нормально, когда я запускаю npm run serve
, но я получаю сообщение об ошибке при попытке его создания для развертывания (npm run build
).
Ошибка: Uncaught SyntaxError: Unexpected token <
.
Я нашел несколько похожих вопросов, и большинство предлагаемых решений сосредоточились вокруг babel. Вот мой babel.config.js
:
module.exports = {
presets: [
'@vue/app'
]
}
К сожалению, ни один из предложенных решений не работал для меня. Как я могу получить это, чтобы построить правильно?
Редактировать:
Версия NPM: 5.5.1 Версия узла: 8.9.0 Vue CLI: v3.0.0-beta.15
Точной командой для создания приложения было vue create my-app
, и я выбрал vue-router, vuex, sass, babel, typescript, unit-jest, e2e-nightwatch
.
Vue.config.js
const webpack = require('webpack');
const path = require('path');
module.exports = {
lintOnSave: false,
baseUrl: '/en-us/credit-application/v2',
outputDir: '/dist/public',
configureWebpack: {
devServer: {
disableHostCheck: true,
host: '0.0.0.0',
publicPath: '/en-us/credit-application/v2',
openPage: 'en-us/credit-application/v2',
open: true,
historyApiFallback: true
},
plugins: [
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
]
}
};
Ошибки:
Я получаю два в консоли.
Uncaught SyntaxError: Unexpected token < chunk-vendors.61f2fa0f.js:1
Uncaught SyntaxError: Unexpected token < app.acdc6caf.js:1
chunk-vendors.js
ведет к этому файлу:
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Material+Icons" rel=stylesheet><title>Credit Application</title><link as=style href=/en-us/credit-application/v2/css/app.847b19ee.css rel=preload><link as=style href=/en-us/credit-application/v2/css/chunk-vendors.95fb3ceb.css rel=preload><link as=script href=/en-us/credit-application/v2/js/app.acdc6caf.js rel=preload><link as=script href=/en-us/credit-application/v2/js/chunk-vendors.61f2fa0f.js rel=preload><link href=/en-us/credit-application/v2/css/chunk-vendors.95fb3ceb.css rel=stylesheet><link href=/en-us/credit-application/v2/css/app.847b19ee.css rel=stylesheet></head><body><noscript><strong>We're sorry but the Credit Application doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script type=text/javascript src=/en-us/credit-application/v2/js/chunk-vendors.61f2fa0f.js></script><script type=text/javascript src=/en-us/credit-application/v2/js/app.acdc6caf.js></script></body></html>
app.acdc6caf.js
приводит к следующему:
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Material+Icons" rel=stylesheet><title>Credit Application</title><link as=style href=/en-us/credit-application/v2/css/app.847b19ee.css rel=preload><link as=style href=/en-us/credit-application/v2/css/chunk-vendors.95fb3ceb.css rel=preload><link as=script href=/en-us/credit-application/v2/js/app.acdc6caf.js rel=preload><link as=script href=/en-us/credit-application/v2/js/chunk-vendors.61f2fa0f.js rel=preload><link href=/en-us/credit-application/v2/css/chunk-vendors.95fb3ceb.css rel=stylesheet><link href=/en-us/credit-application/v2/css/app.847b19ee.css rel=stylesheet></head><body><noscript><strong>We're sorry but the Credit Application doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script type=text/javascript src=/en-us/credit-application/v2/js/chunk-vendors.61f2fa0f.js></script><script type=text/javascript src=/en-us/credit-application/v2/js/app.acdc6caf.js></script></body></html>
В конце концов я понял это. Это оказалось проблемой конфигурации веб-сервера. Ничего общего с babel или шаблоном vue-cli.
В моем файле server.js у меня были следующие строки для обслуживания моих файлов:
let staticPath = path.posix.join('/en-us/credit-application/v2', 'public');
app.use(staticPath, express.static(path.join(__dirname + '/public')));
app.get('/*', (req, res) => {
res.sendFile(path.join(__dirname+'/public/index.html'))
});
Первая строка вызывала ошибку. Я изменил его на:
let staticPath = path.posix.join('/en-us/credit-application/v2');
Все работает! Большое спасибо иппи, который заставил меня указывать в правильном направлении.