Я очень расстроен. У меня есть сервис Express.js
с react.js
интерфейсом, который мне не удается запустить и запустить на Azure через удаленный git pu sh.
У меня это отлично работает на Heroku, но когда я попытался загрузить его на Azure, я получил ошибку, связанную с моим стартовым скриптом, из-за которой (через множество Googles) мне пришлось изменить его с “start” : “babel-node index.js”
to "start": "node ./node_modules/babel-cli/bin/babel-node.js index.js”
.
Развертывание теперь работает, но веб-страница не загружается. Я подозреваю, что эти выходные данные могут иметь какое-то отношение к этому:
remote: Start script "./node_modules/babel-cli/bin/babel-node.js index.js" from package.json is not found.
remote: Missing server.js/app.js files, web.config is not generated
remote: Looking for app.js/server.js under site root.
remote: The package.json file does not specify node.js engine version constraints.
remote: The node.js application will run with the default node.js version 10.15.2.
Я получаю эту ошибку в моем logging-errors.txt
Thu Mar 26 2020 16:19:40 GMT+0000 (Greenwich Mean Time): Application has thrown an uncaught exception and is terminated:
D:\home\site\wwwroot\index.js:1
(function (exports, require, module, __filename, __dirname) { import app from './src/server';
^^^
SyntaxError: Unexpected identifier
В моем коде индекса ниже я также экспериментировал с номером порта по умолчанию и без него.
import app from './src/server';
const PORT = process.env.port || process.env.PORT || 1337;
app.listen(PORT, () => {
console.log(`Server started on port ${PORT}`);
});
Вот мой package.json
{
"name": "app-demo",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "node ./node_modules/babel-cli/bin/babel-node.js index.js"
},
"repository": {
"type": "git",
"url": "git+https://github.com/username/devsum.git"
},
"dependencies": {
"babel-cli": "^6.26.0",
"babel-core": "^6.26.3",
"babel-eslint": "10.0.3",
"babel-loader": "8.0.6",
"babel-plugin-transform-object-rest-spread": "^6.26.0",
"babel-preset-env": "^1.7.0",
"body-parser": "^1.18.3",
"concurrently": "^4.1.0",
"express": "^4.17.1",
"request": "^2.88.0",
"validator": "^10.11.0",
"xml2js": "^0.4.19"
},
"devDependencies": {
"eslint": "^6.6.0",
"eslint-config-airbnb": "^17.1.0",
"eslint-plugin-import": "^2.20.1",
"eslint-plugin-jsx-a11y": "^6.2.1",
"eslint-plugin-react": "^7.18.3",
"nodemon": "^1.18.10",
"react-scripts": "^3.4.0",
"webpack-cli": "^3.3.11"
}
}
Узел на моей машине - 10.16.3, но Azure, кажется, не поддерживает его, поэтому я установил его на следующая наивысшая поддерживаемая версия.
Меня смущает, почему он не находит файл web.config и каталог стартового скрипта, поскольку они оба там, и я даже толкнул весь файл node_modules, а также в других столь же неудачных попытках Я нажал без узловых модулей и затем запустил «npm install» в Azure Kudu CLI, чтобы увидеть, если это что-то изменило.
Чего мне не хватает, что я делаю не так? Это сводило меня с ума в течение нескольких дней! Я включил Server.js
и 'web.config` ниже.
Вот Server.js
import path from 'path';
import express from 'express';
import mainObject from './api/routes/zRoutes';
import appMiddleware from './api/middleware/appMiddleware';
const app = express();
appMiddleware(app);
// Static Folder
app.use(express.static(path.join(__dirname, 'build')));
// Index Route
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'build', 'index.html'));
});
// Use routes
app.use('/app-name/api', mainObject);
// Error handler
// eslint-disable-next-line no-unused-vars
app.use((err, req, res, _) => {
console.log(err);
const status = err.status || 500;
res.status(status).json(err.error);
});
export default app;
А вот web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<webSocket enabled="false" />
<handlers>
<add name="iisnode" path="index.js" verb="*" modules="iisnode"/>
</handlers>
<rewrite>
<rules>
<rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
<match url="^index.js\/debug[\/]?" />
</rule>
<rule name="StaticContent">
<action type="Rewrite" url="public{REQUEST_URI}"/>
</rule>
<rule name="DynamicContent">
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
</conditions>
<action type="Rewrite" url="index.js"/>
</rule>
</rules>
</rewrite>
<security>
<requestFiltering>
<hiddenSegments>
<remove segment="bin"/>
<add segment="node_modules"/>
</hiddenSegments>
</requestFiltering>
</security>
<httpErrors existingResponse="PassThrough" />
<iisnode watchedFiles="web.config;*.js"/>
</system.webServer>
</configuration>