#814 Services unified with karma & e2e tests working
This commit is contained in:
parent
5d84e51639
commit
87dec5e8b2
|
@ -0,0 +1,8 @@
|
||||||
|
FROM node:8-slim
|
||||||
|
|
||||||
|
COPY . /salix
|
||||||
|
COPY dist/webpack-assets.json /salix/client/
|
||||||
|
|
||||||
|
RUN npm -g install pm2
|
||||||
|
WORKDIR /salix
|
||||||
|
CMD ["pm2-docker", "./server/server.js"]
|
|
@ -36,16 +36,18 @@ export default class Controller {
|
||||||
token: data.token,
|
token: data.token,
|
||||||
continue: data.continue
|
continue: data.continue
|
||||||
};
|
};
|
||||||
this.$window.location = `${data.loginUrl}?${this.encodeUri(params)}`;
|
let loginUrl = data.loginUrl || '';
|
||||||
|
this.$window.location = `${loginUrl}?${this.encodeUri(params)}`;
|
||||||
}
|
}
|
||||||
encodeUri(object) {
|
encodeUri(object) {
|
||||||
let uri = '';
|
let uri = '';
|
||||||
for (var key in object)
|
for (let key in object) {
|
||||||
if (object[key]) {
|
if (object[key] !== undefined) {
|
||||||
if (uri.length > 0)
|
if (uri.length > 0)
|
||||||
uri += '&';
|
uri += '&';
|
||||||
uri += encodeURIComponent(key) + '=' + encodeURIComponent(object[key]);
|
uri += encodeURIComponent(key) + '=' + encodeURIComponent(object[key]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return uri;
|
return uri;
|
||||||
}
|
}
|
||||||
onLoginErr(json) {
|
onLoginErr(json) {
|
||||||
|
|
|
@ -20,15 +20,16 @@ export default class MainMenu {
|
||||||
this.modules = modulesFactory.getModules();
|
this.modules = modulesFactory.getModules();
|
||||||
this.langs = [];
|
this.langs = [];
|
||||||
|
|
||||||
for (var code of $translate.getAvailableLanguageKeys())
|
for (let code of $translate.getAvailableLanguageKeys()) {
|
||||||
this.langs.push({
|
this.langs.push({
|
||||||
code: code,
|
code: code,
|
||||||
name: languages[code] ? languages[code] : code
|
name: languages[code] ? languages[code] : code
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
getCurrentUserName() {
|
getCurrentUserName() {
|
||||||
this.$http.get('/auth/api/Accounts/getCurrentUserName')
|
this.$http.get('/api/Accounts/getCurrentUserName')
|
||||||
.then(json => {
|
.then(json => {
|
||||||
this.$.currentUserName = json.data;
|
this.$.currentUserName = json.data;
|
||||||
});
|
});
|
||||||
|
|
|
@ -4,21 +4,18 @@ describe('Component vnMainMenu', () => {
|
||||||
let $httpBackend;
|
let $httpBackend;
|
||||||
let controller;
|
let controller;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(ngModule('salix'));
|
||||||
angular.mock.module('salix');
|
|
||||||
});
|
|
||||||
|
|
||||||
beforeEach(angular.mock.inject((_$componentController_, _$httpBackend_) => {
|
beforeEach(angular.mock.inject((_$componentController_, _$httpBackend_) => {
|
||||||
let modulesFactory = {getModules: () => {}};
|
let modulesFactory = {getModules: () => {}};
|
||||||
$httpBackend = _$httpBackend_;
|
$httpBackend = _$httpBackend_;
|
||||||
$httpBackend.when('GET', /\/locale\/\w+\/[a-z]{2}\.json/).respond({});
|
|
||||||
controller = _$componentController_('vnMainMenu', {modulesFactory: modulesFactory});
|
controller = _$componentController_('vnMainMenu', {modulesFactory: modulesFactory});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
describe('getCurrentUserName()', () => {
|
describe('getCurrentUserName()', () => {
|
||||||
it(`should set the user name property in the controller`, () => {
|
it(`should set the user name property in the controller`, () => {
|
||||||
$httpBackend.when('GET', `/auth/api/Accounts/getCurrentUserName`).respond('Batman');
|
$httpBackend.when('GET', `/api/Accounts/getCurrentUserName`).respond('Batman');
|
||||||
$httpBackend.expect('GET', `/auth/api/Accounts/getCurrentUserName`);
|
$httpBackend.expect('GET', `/api/Accounts/getCurrentUserName`);
|
||||||
controller.getCurrentUserName();
|
controller.getCurrentUserName();
|
||||||
$httpBackend.flush();
|
$httpBackend.flush();
|
||||||
|
|
||||||
|
|
51
gulpfile.js
51
gulpfile.js
|
@ -19,6 +19,7 @@ let env = process.env.NODE_ENV ? process.env.NODE_ENV : 'development';
|
||||||
let langs = ['es', 'en'];
|
let langs = ['es', 'en'];
|
||||||
let srcDir = './client';
|
let srcDir = './client';
|
||||||
let servicesDir = './services';
|
let servicesDir = './services';
|
||||||
|
let services = require('./services/services.yml');
|
||||||
|
|
||||||
let wpConfig = require('./webpack.config.yml');
|
let wpConfig = require('./webpack.config.yml');
|
||||||
let buildDir = wpConfig.buildDir;
|
let buildDir = wpConfig.buildDir;
|
||||||
|
@ -37,7 +38,7 @@ let defaultPort = proxyConf.defaultPort;
|
||||||
// Development
|
// Development
|
||||||
|
|
||||||
gulp.task('default', () => {
|
gulp.task('default', () => {
|
||||||
return gulp.start('services', 'client');
|
return gulp.start('client', 'services');
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('client', ['build-clean'], async () => {
|
gulp.task('client', ['build-clean'], async () => {
|
||||||
|
@ -54,10 +55,10 @@ gulp.task('services', async () => {
|
||||||
/**
|
/**
|
||||||
* Starts backend services.
|
* Starts backend services.
|
||||||
*/
|
*/
|
||||||
gulp.task('services-only', async () => {
|
gulp.task('services-only', callback => {
|
||||||
const services = await getServices();
|
let app = require(`./services/loopback/server/server`);
|
||||||
for (let service of services)
|
app.start(defaultPort);
|
||||||
require(service.index).start(service.port);
|
app.on('started', callback);
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -148,7 +149,6 @@ gulp.task('docker-compose', async () => {
|
||||||
|
|
||||||
let compose = await fs.readFile('./docker-compose.tpl.yml', 'utf8');
|
let compose = await fs.readFile('./docker-compose.tpl.yml', 'utf8');
|
||||||
let composeYml = yaml.safeLoad(compose);
|
let composeYml = yaml.safeLoad(compose);
|
||||||
let services = await getServices();
|
|
||||||
|
|
||||||
let imageTag = 'latest';
|
let imageTag = 'latest';
|
||||||
if (process.env.BUILD_NUMBER)
|
if (process.env.BUILD_NUMBER)
|
||||||
|
@ -160,12 +160,12 @@ gulp.task('docker-compose', async () => {
|
||||||
|
|
||||||
for (let service of services) {
|
for (let service of services) {
|
||||||
let dockerFile = `Dockerfile`;
|
let dockerFile = `Dockerfile`;
|
||||||
let localDockerFile = `${__dirname}/services/${service.name}/Dockerfile`;
|
let localDockerFile = `${__dirname}/services/${service}/Dockerfile`;
|
||||||
|
|
||||||
if (await fs.exists(localDockerFile))
|
if (await fs.exists(localDockerFile))
|
||||||
dockerFile = localDockerFile;
|
dockerFile = localDockerFile;
|
||||||
|
|
||||||
composeYml.services[service.name] = {
|
composeYml.services[service] = {
|
||||||
build: {
|
build: {
|
||||||
context: `./services`,
|
context: `./services`,
|
||||||
dockerfile: dockerFile
|
dockerfile: dockerFile
|
||||||
|
@ -177,7 +177,7 @@ gulp.task('docker-compose', async () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
composeYml.services.nginx.links.push(
|
composeYml.services.nginx.links.push(
|
||||||
`${service.name}:${namePrefix}${service.name}`
|
`${service}:${namePrefix}${service}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,7 +216,7 @@ let nginxTemp = `${nginxDir}/temp`;
|
||||||
* Starts the nginx process, if it is started, restarts it.
|
* Starts the nginx process, if it is started, restarts it.
|
||||||
*/
|
*/
|
||||||
gulp.task('nginx', async () => {
|
gulp.task('nginx', async () => {
|
||||||
await runSequenceP('nginx-stop', 'nginx-start');
|
await runSequenceP('nginx-start');
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -228,7 +228,7 @@ gulp.task('nginx-start', ['nginx-conf'], async () => {
|
||||||
if (isWindows)
|
if (isWindows)
|
||||||
nginxBin = `start /B ${nginxBin}`;
|
nginxBin = `start /B ${nginxBin}`;
|
||||||
|
|
||||||
log(`Application will be available at http://${proxyConf.host}:${proxyConf.port}/`);
|
log(`Application available at http://${proxyConf.host}:${proxyConf.port}/`);
|
||||||
await execP(`${nginxBin} -c "${nginxConf}" -p "${nginxDir}"`);
|
await execP(`${nginxBin} -c "${nginxConf}" -p "${nginxDir}"`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -255,7 +255,7 @@ gulp.task('nginx-conf', ['nginx-stop'], async () => {
|
||||||
await fs.mkdir(nginxTemp);
|
await fs.mkdir(nginxTemp);
|
||||||
|
|
||||||
let params = {
|
let params = {
|
||||||
services: await getServices(),
|
services: services,
|
||||||
defaultService: defaultService,
|
defaultService: defaultService,
|
||||||
defaultPort: defaultPort,
|
defaultPort: defaultPort,
|
||||||
devServerPort: devServerPort,
|
devServerPort: devServerPort,
|
||||||
|
@ -294,29 +294,6 @@ async function nginxGetBin() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getServices() {
|
|
||||||
let services;
|
|
||||||
let startPort = defaultPort + 1;
|
|
||||||
services = [];
|
|
||||||
|
|
||||||
const serviceDirs = await fs.readdir(servicesDir);
|
|
||||||
const exclude = ['loopback'];
|
|
||||||
|
|
||||||
for (let service of serviceDirs) {
|
|
||||||
let index = `${servicesDir}/${service}/server/server.js`;
|
|
||||||
if (!await fs.exists(index) || exclude.indexOf(service) !== -1) continue;
|
|
||||||
|
|
||||||
let port = service == defaultService ? defaultPort : startPort++;
|
|
||||||
services.push({
|
|
||||||
name: service,
|
|
||||||
index: index,
|
|
||||||
port: port
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return services;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Webpack
|
// Webpack
|
||||||
|
|
||||||
gulp.task('webpack', function(callback) {
|
gulp.task('webpack', function(callback) {
|
||||||
|
@ -562,9 +539,9 @@ function execP(command) {
|
||||||
* @param {String} args The list of gulp task names
|
* @param {String} args The list of gulp task names
|
||||||
* @return {Promise} The promise
|
* @return {Promise} The promise
|
||||||
*/
|
*/
|
||||||
function runSequenceP() {
|
function runSequenceP(...args) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let args = Array.prototype.slice.call(arguments);
|
args = Array.prototype.slice.call(args);
|
||||||
args.push(err => {
|
args.push(err => {
|
||||||
if (err)
|
if (err)
|
||||||
reject(err);
|
reject(err);
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
FROM vn-loopback:latest
|
|
||||||
|
|
||||||
COPY agency /app
|
|
||||||
WORKDIR /app
|
|
||||||
CMD ["pm2-docker", "./server/server.js"]
|
|
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
"name": "vn-agency",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"main": "server/server.js",
|
|
||||||
"scripts": {
|
|
||||||
"start": "node .",
|
|
||||||
"posttest": "npm run lint && nsp check"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.verdnatura.es/salix"
|
|
||||||
},
|
|
||||||
"license": "GPL-3.0",
|
|
||||||
"description": "vn-agency",
|
|
||||||
"dependencies": {
|
|
||||||
"vn-loopback": "file:../loopback"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
|
|
||||||
var vnLoopback = require('vn-loopback/server/server.js');
|
|
||||||
|
|
||||||
var app = module.exports = vnLoopback.loopback();
|
|
||||||
vnLoopback.boot(app, __dirname, module);
|
|
|
@ -1,7 +0,0 @@
|
||||||
FROM vn-loopback:latest
|
|
||||||
|
|
||||||
COPY auth /app
|
|
||||||
COPY nginx/static/webpack-assets.json /loopback/client/
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
CMD ["pm2-docker", "./server/server.js"]
|
|
|
@ -1,19 +0,0 @@
|
||||||
{
|
|
||||||
"name": "vn-auth",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"main": "server/server.js",
|
|
||||||
"scripts": {
|
|
||||||
"start": "node .",
|
|
||||||
"posttest": "npm run lint && nsp check"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"md5": "^2.2.1",
|
|
||||||
"vn-loopback": "file:../loopback"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.verdnatura.es/salix"
|
|
||||||
},
|
|
||||||
"license": "GPL-3.0",
|
|
||||||
"description": "Authentication service"
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
|
|
||||||
var vnLoopback = require('vn-loopback/server/server.js');
|
|
||||||
|
|
||||||
var app = module.exports = vnLoopback.loopback();
|
|
||||||
app.set('applications', require('./application.json'));
|
|
||||||
vnLoopback.boot(app, __dirname, module);
|
|
|
@ -1,5 +0,0 @@
|
||||||
FROM vn-loopback:latest
|
|
||||||
|
|
||||||
COPY claim /app
|
|
||||||
WORKDIR /app
|
|
||||||
CMD ["pm2-docker", "./server/server.js"]
|
|
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
"name": "vn-claim",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"main": "server/server.js",
|
|
||||||
"scripts": {
|
|
||||||
"start": "node .",
|
|
||||||
"posttest": "npm run lint && nsp check"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"vn-loopback": "file:../loopback"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.verdnatura.es/salix"
|
|
||||||
},
|
|
||||||
"license": "GPL-3.0",
|
|
||||||
"description": "vn-claim"
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
|
|
||||||
var vnLoopback = require('vn-loopback/server/server.js');
|
|
||||||
|
|
||||||
var app = module.exports = vnLoopback.loopback();
|
|
||||||
vnLoopback.boot(app, __dirname, module);
|
|
|
@ -1,6 +0,0 @@
|
||||||
FROM vn-loopback:latest
|
|
||||||
|
|
||||||
COPY client /app
|
|
||||||
WORKDIR /app
|
|
||||||
CMD ["pm2-docker", "./server/server.js"]
|
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
{
|
|
||||||
"name": "vn-client",
|
|
||||||
"description": "Client service",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"license": "GPL-3.0",
|
|
||||||
"main": "server/server.js",
|
|
||||||
"scripts": {
|
|
||||||
"start": "node .",
|
|
||||||
"posttest": "npm run lint && nsp check"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.verdnatura.es/salix"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"request": "^2.83.0",
|
|
||||||
"vn-loopback": "file:../loopback"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
|
|
||||||
var vnLoopback = require('vn-loopback/server/server.js');
|
|
||||||
|
|
||||||
var app = module.exports = vnLoopback.loopback();
|
|
||||||
vnLoopback.boot(app, __dirname, module);
|
|
|
@ -1,6 +0,0 @@
|
||||||
FROM vn-loopback:latest
|
|
||||||
|
|
||||||
COPY item /app
|
|
||||||
WORKDIR /app
|
|
||||||
CMD ["pm2-docker", "./server/server.js"]
|
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
{
|
|
||||||
"name": "vn-item",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"lockfileVersion": 1,
|
|
||||||
"requires": true,
|
|
||||||
"dependencies": {
|
|
||||||
"uuid": {
|
|
||||||
"version": "3.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
|
|
||||||
"integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
{
|
|
||||||
"name": "vn-item",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"main": "server/server.js",
|
|
||||||
"scripts": {
|
|
||||||
"start": "node .",
|
|
||||||
"posttest": "npm run lint && nsp check"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.verdnatura.es/salix"
|
|
||||||
},
|
|
||||||
"license": "GPL-3.0",
|
|
||||||
"description": "vn-item",
|
|
||||||
"dependencies": {
|
|
||||||
"uuid": "^3.1.0",
|
|
||||||
"vn-loopback": "file:../loopback"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
var vnLoopback = require('vn-loopback/server/server.js');
|
|
||||||
|
|
||||||
var app = module.exports = vnLoopback.loopback();
|
|
||||||
vnLoopback.boot(app, __dirname, module);
|
|
|
@ -1,4 +0,0 @@
|
||||||
FROM node:8-slim
|
|
||||||
|
|
||||||
COPY . /loopback
|
|
||||||
RUN npm -g install pm2
|
|
|
@ -6,7 +6,7 @@
|
||||||
</head>
|
</head>
|
||||||
<body ng-app="vnAuth">
|
<body ng-app="vnAuth">
|
||||||
<vn-login></vn-login>
|
<vn-login></vn-login>
|
||||||
<% for (let jsFile of assets('auth')) { %>
|
<% for (let jsFile of assets) { %>
|
||||||
<script type="text/javascript" src="<%= jsFile %>"></script>
|
<script type="text/javascript" src="<%= jsFile %>"></script>
|
||||||
<% } %>
|
<% } %>
|
||||||
</body>
|
</body>
|
|
@ -10,7 +10,7 @@
|
||||||
<script type="text/javascript"
|
<script type="text/javascript"
|
||||||
src="/static/routes.js?<%= version %>">
|
src="/static/routes.js?<%= version %>">
|
||||||
</script>
|
</script>
|
||||||
<% for (let jsFile of assets('salix')) { %>
|
<% for (let jsFile of assets) { %>
|
||||||
<script type="text/javascript" src="<%= jsFile %>"></script>
|
<script type="text/javascript" src="<%= jsFile %>"></script>
|
||||||
<% } %>
|
<% } %>
|
||||||
</body>
|
</body>
|
|
@ -22,5 +22,7 @@
|
||||||
"Cannot check Equalization Tax in this NIF/CIF": "Cannot check Equalization Tax in this NIF/CIF",
|
"Cannot check Equalization Tax in this NIF/CIF": "Cannot check Equalization Tax in this NIF/CIF",
|
||||||
"You can't create an order for a frozen client": "You can't create an order for a frozen client",
|
"You can't create an order for a frozen client": "You can't create an order for a frozen client",
|
||||||
"This address doesn't exist": "This address doesn't exist",
|
"This address doesn't exist": "This address doesn't exist",
|
||||||
"NO_AGENCY_AVAILABLE": "NO_AGENCY_AVAILABLE"
|
"NO_AGENCY_AVAILABLE": "NO_AGENCY_AVAILABLE",
|
||||||
|
"Warehouse cannot be blank": "Warehouse cannot be blank",
|
||||||
|
"Agency cannot be blank": "Agency cannot be blank"
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,27 +1,30 @@
|
||||||
{
|
{
|
||||||
"name": "vn-loopback",
|
"name": "vn-loopback",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
"main": "server/server.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node ."
|
"start": "node ."
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"compression": "^1.0.3",
|
"compression": "^1.0.3",
|
||||||
|
"cookie-parser": "^1.4.3",
|
||||||
"cors": "^2.5.2",
|
"cors": "^2.5.2",
|
||||||
"fs-extra": "^5.0.0",
|
"fs-extra": "^5.0.0",
|
||||||
"helmet": "^1.3.0",
|
"helmet": "^1.3.0",
|
||||||
"i18n": "^0.8.3",
|
"i18n": "^0.8.3",
|
||||||
"loopback": "^3.14.0",
|
"loopback": "^3.24.0",
|
||||||
"loopback-boot": "^2.26.2",
|
"loopback-boot": "^2.27.1",
|
||||||
"loopback-component-explorer": "^4.2.0",
|
"loopback-component-explorer": "^6.3.1",
|
||||||
"loopback-connector-mysql": "^3.0.0",
|
"loopback-connector-mysql": "^5.3.1",
|
||||||
"loopback-connector-remote": "^3.1.1",
|
"loopback-connector-remote": "^3.4.0",
|
||||||
"loopback-context": "^3.3.0",
|
"loopback-context": "^3.3.0",
|
||||||
"md5": "^2.2.1",
|
"object-diff": "0.0.4",
|
||||||
|
"object.pick": "^1.3.0",
|
||||||
|
"request": "^2.83.0",
|
||||||
"require-yaml": "0.0.1",
|
"require-yaml": "0.0.1",
|
||||||
"serve-favicon": "^2.0.1",
|
"serve-favicon": "^2.0.1",
|
||||||
"strong-error-handler": "^2.1.0",
|
"strong-error-handler": "^2.1.0",
|
||||||
"object-diff": "0.0.4",
|
"uuid": "^3.1.0"
|
||||||
"object.pick": "^1.3.0"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"nsp": "^2.1.0"
|
"nsp": "^2.1.0"
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
var url = require('url');
|
let url = require('url');
|
||||||
var md5 = require('md5');
|
let md5 = require('md5');
|
||||||
|
|
||||||
module.exports = function(app) {
|
module.exports = function(app) {
|
||||||
let User = app.models.User;
|
let User = app.models.User;
|
||||||
let applications = app.get('applications');
|
let applications = app.get('applications');
|
||||||
|
|
||||||
app.get('/', function(req, res) {
|
app.get('/auth/', function(req, res) {
|
||||||
app.renderIndex(res);
|
res.render('auth.ejs', {
|
||||||
|
assets: app.getWpAssets('auth')
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
app.post('/login', function(req, res) {
|
app.post('/auth/login', function(req, res) {
|
||||||
let body = req.body;
|
let body = req.body;
|
||||||
let user = body.user;
|
let user = body.user;
|
||||||
let password = body.password;
|
let password = body.password;
|
||||||
|
@ -47,11 +49,11 @@ module.exports = function(app) {
|
||||||
apiKey = query.apiKey;
|
apiKey = query.apiKey;
|
||||||
continueUrl = query.continue;
|
continueUrl = query.continue;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
apiKey = 'default';
|
|
||||||
continueUrl = null;
|
continueUrl = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
let loginUrl = applications[apiKey];
|
if (!apiKey) apiKey = 'default';
|
||||||
|
let loginUrl = applications[apiKey] || '/login';
|
||||||
|
|
||||||
res.json({
|
res.json({
|
||||||
token: token.id,
|
token: token.id,
|
||||||
|
@ -84,7 +86,7 @@ module.exports = function(app) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/logout', function(req, res) {
|
app.get('/auth/logout', function(req, res) {
|
||||||
User.logout(req.accessToken.id, () => {
|
User.logout(req.accessToken.id, () => {
|
||||||
res.redirect('/');
|
res.redirect('/');
|
||||||
});
|
});
|
|
@ -1,13 +1,19 @@
|
||||||
module.exports = function(app) {
|
module.exports = function(app) {
|
||||||
let models = app.models;
|
let models = app.models;
|
||||||
|
let bootTimestamp = new Date().getTime();
|
||||||
|
|
||||||
app.get('/', function(req, res) {
|
app.get('/', function(req, res) {
|
||||||
let token = req.cookies.vnToken;
|
let token = req.cookies.vnToken;
|
||||||
validateToken(token, function(isValid) {
|
validateToken(token, function(isValid) {
|
||||||
if (isValid)
|
if (!isValid) {
|
||||||
app.renderIndex(res);
|
|
||||||
else
|
|
||||||
redirectToAuth(res, req.get('origin'));
|
redirectToAuth(res, req.get('origin'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
res.render('index.ejs', {
|
||||||
|
assets: app.getWpAssets('salix'),
|
||||||
|
version: bootTimestamp
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -45,9 +51,9 @@ module.exports = function(app) {
|
||||||
let token = req.headers.authorization;
|
let token = req.headers.authorization;
|
||||||
|
|
||||||
validateToken(token, function(isValid) {
|
validateToken(token, function(isValid) {
|
||||||
if (isValid) {
|
if (isValid)
|
||||||
res.json(null);
|
res.json(null);
|
||||||
} else {
|
else {
|
||||||
res.status(401).json({
|
res.status(401).json({
|
||||||
message: 'Invalid token'
|
message: 'Invalid token'
|
||||||
});
|
});
|
||||||
|
@ -82,7 +88,7 @@ module.exports = function(app) {
|
||||||
};
|
};
|
||||||
models.RoleMapping.find(query, function(_, roles) {
|
models.RoleMapping.find(query, function(_, roles) {
|
||||||
if (roles) {
|
if (roles) {
|
||||||
var acl = {
|
let acl = {
|
||||||
userProfile: {},
|
userProfile: {},
|
||||||
roles: {}
|
roles: {}
|
||||||
};
|
};
|
||||||
|
@ -99,9 +105,8 @@ module.exports = function(app) {
|
||||||
acl.userProfile.username = userProfile.username;
|
acl.userProfile.username = userProfile.username;
|
||||||
acl.userProfile.warehouseId = 1;
|
acl.userProfile.warehouseId = 1;
|
||||||
sendACL(res, acl);
|
sendACL(res, acl);
|
||||||
} else {
|
} else
|
||||||
sendACL(res, {});
|
sendACL(res, {});
|
||||||
}
|
|
||||||
});
|
});
|
||||||
} else
|
} else
|
||||||
sendACL(res, {});
|
sendACL(res, {});
|
||||||
|
@ -129,12 +134,13 @@ module.exports = function(app) {
|
||||||
|
|
||||||
function encodeUri(object) {
|
function encodeUri(object) {
|
||||||
let uri = '';
|
let uri = '';
|
||||||
for (var key in object)
|
for (let key in object) {
|
||||||
if (object[key]) {
|
if (object[key]) {
|
||||||
if (uri.length > 0)
|
if (uri.length > 0)
|
||||||
uri += '&';
|
uri += '&';
|
||||||
uri += encodeURIComponent(key) + '=';
|
uri += encodeURIComponent(key) + '=';
|
||||||
uri += encodeURIComponent(object[key]);
|
uri += encodeURIComponent(object[key]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return uri;
|
return uri;
|
||||||
}
|
}
|
|
@ -1,14 +1,16 @@
|
||||||
let loopback = require('loopback');
|
require('require-yaml');
|
||||||
let boot = require('loopback-boot');
|
const cookieParser = require('cookie-parser');
|
||||||
let DataSource = require('loopback-datasource-juggler').DataSource;
|
const loopback = require('loopback');
|
||||||
let fs = require('fs-extra');
|
const boot = require('loopback-boot');
|
||||||
let i18n = require('i18n');
|
const DataSource = require('loopback-datasource-juggler').DataSource;
|
||||||
let path = require('path');
|
const fs = require('fs-extra');
|
||||||
|
const i18n = require('i18n');
|
||||||
|
const path = require('path');
|
||||||
const loopbackConnector = require('loopback-connector');
|
const loopbackConnector = require('loopback-connector');
|
||||||
|
|
||||||
let _resolveConnector = DataSource._resolveConnector;
|
let _resolveConnector = DataSource._resolveConnector;
|
||||||
|
DataSource._resolveConnector = function(...args) {
|
||||||
DataSource._resolveConnector = function(name) {
|
let name = args[0];
|
||||||
let testPath = `${__dirname}/connectors/${name}.js`;
|
let testPath = `${__dirname}/connectors/${name}.js`;
|
||||||
|
|
||||||
if (fs.existsSync(testPath)) {
|
if (fs.existsSync(testPath)) {
|
||||||
|
@ -18,16 +20,21 @@ DataSource._resolveConnector = function(name) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return _resolveConnector.apply(this, arguments);
|
return _resolveConnector.apply(this, args);
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = {
|
let app = loopback();
|
||||||
loopback: loopback,
|
let rootDir = __dirname;
|
||||||
loopbackConnector: loopbackConnector,
|
|
||||||
boot: vnBoot
|
module.exports = app;
|
||||||
};
|
|
||||||
|
// TODO: It should be stored at some config file
|
||||||
|
app.set('api key', 'salix');
|
||||||
|
app.set('url auth', '/auth');
|
||||||
|
app.set('applications', require('./application.json'));
|
||||||
|
|
||||||
|
app.use(cookieParser());
|
||||||
|
|
||||||
function vnBoot(app, rootDir, rootModule) {
|
|
||||||
// Internationalization
|
// Internationalization
|
||||||
|
|
||||||
let localeDir = `${__dirname}/../common/locale`;
|
let localeDir = `${__dirname}/../common/locale`;
|
||||||
|
@ -43,7 +50,6 @@ function vnBoot(app, rootDir, rootModule) {
|
||||||
|
|
||||||
// View
|
// View
|
||||||
|
|
||||||
let wpAssets;
|
|
||||||
let viewDir = `${rootDir}/../client`;
|
let viewDir = `${rootDir}/../client`;
|
||||||
|
|
||||||
if (fs.existsSync(viewDir)) {
|
if (fs.existsSync(viewDir)) {
|
||||||
|
@ -52,25 +58,27 @@ function vnBoot(app, rootDir, rootModule) {
|
||||||
app.use(loopback.static(path.resolve(rootDir, '../client')));
|
app.use(loopback.static(path.resolve(rootDir, '../client')));
|
||||||
}
|
}
|
||||||
|
|
||||||
const buildVersion = new Date().getTime();
|
let assetsPath = [
|
||||||
|
viewDir,
|
||||||
|
`${__dirname}/../../../dist`
|
||||||
|
];
|
||||||
|
|
||||||
app.renderIndex = async res => {
|
let wpAssets;
|
||||||
let assetsDirs = [viewDir, `${__dirname}/../../../dist`];
|
let wpAssetsFound = false;
|
||||||
|
|
||||||
for (let assetsDir of assetsDirs) {
|
for (let assetsDir of assetsPath) {
|
||||||
let wpAssetsFile = `${assetsDir}/webpack-assets.json`;
|
let wpAssetsFile = `${assetsDir}/webpack-assets.json`;
|
||||||
if (fs.existsSync(wpAssetsFile)) {
|
wpAssetsFound = fs.existsSync(wpAssetsFile);
|
||||||
|
if (wpAssetsFound) {
|
||||||
wpAssets = require(wpAssetsFile);
|
wpAssets = require(wpAssetsFile);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
res.render(`${viewDir}/index.ejs`, {
|
app.getWpAssets = function(entryPoint) {
|
||||||
assets: assets,
|
if (!wpAssetsFound)
|
||||||
version: buildVersion
|
throw new Error('webpack-assets.json file not found');
|
||||||
});
|
|
||||||
|
|
||||||
function assets(entryPoint) {
|
|
||||||
let jsFiles = [];
|
let jsFiles = [];
|
||||||
let regex = new RegExp(`(^|~)${entryPoint}($|~)`);
|
let regex = new RegExp(`(^|~)${entryPoint}($|~)`);
|
||||||
|
|
||||||
|
@ -80,18 +88,16 @@ function vnBoot(app, rootDir, rootModule) {
|
||||||
}
|
}
|
||||||
|
|
||||||
return jsFiles;
|
return jsFiles;
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Initialization
|
// Initialization
|
||||||
|
|
||||||
app.start = port => {
|
app.start = function(port, callback) {
|
||||||
function onListen() {
|
function onListen() {
|
||||||
app.emit('started');
|
|
||||||
let packageJson = require(`${rootDir}/../package.json`);
|
|
||||||
let appName = packageJson.name;
|
|
||||||
let baseUrl = app.get('url').replace(/\/$/, '');
|
let baseUrl = app.get('url').replace(/\/$/, '');
|
||||||
console.log(`Web server ${appName} listening at: %s`, `${baseUrl}/explorer`);
|
let explorerPath = app.get('loopback-component-explorer').mountPath;
|
||||||
|
console.log(`Browse your REST API at: %s`, `${baseUrl}${explorerPath}`);
|
||||||
|
app.emit('started');
|
||||||
}
|
}
|
||||||
|
|
||||||
let args = port ? [port, onListen] : [onListen];
|
let args = port ? [port, onListen] : [onListen];
|
||||||
|
@ -103,47 +109,55 @@ function vnBoot(app, rootDir, rootModule) {
|
||||||
for (let key in config)
|
for (let key in config)
|
||||||
app.set(key, config[key]);
|
app.set(key, config[key]);
|
||||||
|
|
||||||
|
let servicesDir = `${__dirname}/../..`;
|
||||||
|
|
||||||
let modelConfigFiles = [
|
let modelConfigFiles = [
|
||||||
`${__dirname}/model-config.json`,
|
`${__dirname}/model-config.json`
|
||||||
`${rootDir}/model-config.json`
|
];
|
||||||
|
let modelSources = [
|
||||||
|
`loopback/common/models`,
|
||||||
|
`loopback/server/models`,
|
||||||
|
`${__dirname}/../common/models`
|
||||||
|
];
|
||||||
|
let mixinDirs = [
|
||||||
|
`loopback/common/mixins`,
|
||||||
|
`loopback/server/mixins`,
|
||||||
|
`${__dirname}/../common/mixins`
|
||||||
|
];
|
||||||
|
let bootDirs = [
|
||||||
|
`${__dirname}/boot`
|
||||||
];
|
];
|
||||||
|
|
||||||
let modelConfig = {};
|
let services = require(`${servicesDir}/services.yml`);
|
||||||
|
for (let service of services) {
|
||||||
|
let baseDir = `${servicesDir}/${service}`;
|
||||||
|
modelConfigFiles.push(`${baseDir}/server/model-config.json`);
|
||||||
|
modelSources.push(`${baseDir}/common/models`);
|
||||||
|
mixinDirs.push(`${baseDir}/common/mixins`);
|
||||||
|
bootDirs.push(`${baseDir}/server/boot`);
|
||||||
|
}
|
||||||
|
|
||||||
|
let models = {};
|
||||||
for (file of modelConfigFiles) {
|
for (file of modelConfigFiles) {
|
||||||
if (fs.existsSync(file))
|
if (fs.existsSync(file))
|
||||||
Object.assign(modelConfig, require(file));
|
Object.assign(models, require(file));
|
||||||
}
|
}
|
||||||
|
|
||||||
let bootOptions = {
|
let bootOptions = {
|
||||||
appRootDir: __dirname,
|
appRootDir: __dirname,
|
||||||
appConfigRootDir: rootDir,
|
appConfigRootDir: rootDir,
|
||||||
modelsRootDir: rootDir,
|
modelsRootDir: rootDir,
|
||||||
models: modelConfig,
|
models: models,
|
||||||
modelSources: [
|
modelSources: modelSources,
|
||||||
`loopback/common/models`,
|
mixinDirs: mixinDirs,
|
||||||
`loopback/server/models`,
|
bootDirs: bootDirs
|
||||||
`${__dirname}/../common/models`,
|
|
||||||
`${rootDir}/../common/models`
|
|
||||||
],
|
|
||||||
mixinDirs: [
|
|
||||||
`loopback/common/mixins`,
|
|
||||||
`loopback/server/mixins`,
|
|
||||||
`${__dirname}/../common/mixins`,
|
|
||||||
`${rootDir}/../common/mixins`
|
|
||||||
],
|
|
||||||
bootDirs: [
|
|
||||||
`${__dirname}/boot`,
|
|
||||||
`${rootDir}/boot`
|
|
||||||
]
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (fs.existsSync(`/config`))
|
if (fs.existsSync(`/etc/salix`))
|
||||||
bootOptions.dsRootDir = `/config`;
|
bootOptions.dsRootDir = `/etc/salix`;
|
||||||
|
|
||||||
boot(app, bootOptions, function(err) {
|
boot(app, bootOptions, function(err) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
if (require.main === rootModule)
|
if (require.main === module)
|
||||||
app.start();
|
app.start();
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
|
@ -26,8 +26,8 @@ http {
|
||||||
autoindex off;
|
autoindex off;
|
||||||
|
|
||||||
{{#services}}
|
{{#services}}
|
||||||
location ~ ^/{{name}}(?:/(.*))?$ {
|
location ~ ^/{{.}}(?:/(.*))?$ {
|
||||||
proxy_pass http://127.0.0.1:{{port}}/$1$is_args$args;
|
proxy_pass http://127.0.0.1:{{defaultPort}}/$1$is_args$args;
|
||||||
}
|
}
|
||||||
{{/services}}
|
{{/services}}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
FROM vn-loopback:latest
|
|
||||||
|
|
||||||
COPY order /app
|
|
||||||
WORKDIR /app
|
|
||||||
CMD ["pm2-docker", "./server/server.js"]
|
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
{
|
|
||||||
"name": "vn-order",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"main": "server/server.js",
|
|
||||||
"scripts": {
|
|
||||||
"start": "node .",
|
|
||||||
"posttest": "npm run lint && nsp check"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.verdnatura.es/salix"
|
|
||||||
},
|
|
||||||
"license": "GPL-3.0",
|
|
||||||
"description": "vn-order",
|
|
||||||
"dependencies": {
|
|
||||||
"uuid": "^3.1.0",
|
|
||||||
"vn-loopback": "file:../loopback"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
var vnLoopback = require('vn-loopback/server/server.js');
|
|
||||||
|
|
||||||
var app = module.exports = vnLoopback.loopback();
|
|
||||||
vnLoopback.boot(app, __dirname, module);
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"name": "vn-module",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"dependencies": {
|
||||||
|
"md5": "^2.2.1",
|
||||||
|
"vn-loopback": "file:./loopback"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.verdnatura.es/salix"
|
||||||
|
},
|
||||||
|
"license": "GPL-3.0",
|
||||||
|
"description": "Loopback modules"
|
||||||
|
}
|
|
@ -1,5 +0,0 @@
|
||||||
FROM vn-loopback:latest
|
|
||||||
|
|
||||||
COPY route /app
|
|
||||||
WORKDIR /app
|
|
||||||
CMD ["pm2-docker", "./server/server.js"]
|
|
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
"name": "vn-route",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"main": "server/server.js",
|
|
||||||
"scripts": {
|
|
||||||
"start": "node .",
|
|
||||||
"posttest": "npm run lint && nsp check"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"vn-loopback": "file:../loopback"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.verdnatura.es/salix"
|
|
||||||
},
|
|
||||||
"license": "GPL-3.0",
|
|
||||||
"description": "Routes administration"
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
|
|
||||||
var vnLoopback = require('vn-loopback/server/server.js');
|
|
||||||
|
|
||||||
var app = module.exports = vnLoopback.loopback();
|
|
||||||
vnLoopback.boot(app, __dirname, module);
|
|
|
@ -1,6 +0,0 @@
|
||||||
FROM vn-loopback:latest
|
|
||||||
|
|
||||||
COPY salix /app
|
|
||||||
COPY nginx/static/webpack-assets.json /loopback/client/
|
|
||||||
WORKDIR /app
|
|
||||||
CMD ["pm2-docker", "./server/server.js"]
|
|
|
@ -1,19 +0,0 @@
|
||||||
{
|
|
||||||
"name": "salix",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"main": "server/server.js",
|
|
||||||
"scripts": {
|
|
||||||
"start": "node .",
|
|
||||||
"posttest": "npm run lint && nsp check"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"cookie-parser": "^1.4.3",
|
|
||||||
"vn-loopback": "file:../loopback"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.verdnatura.es/salix"
|
|
||||||
},
|
|
||||||
"license": "GPL-3.0",
|
|
||||||
"description": "Salix application service"
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
|
|
||||||
var cookieParser = require('cookie-parser');
|
|
||||||
var vnLoopback = require('vn-loopback/server/server.js');
|
|
||||||
|
|
||||||
var app = module.exports = vnLoopback.loopback();
|
|
||||||
|
|
||||||
// TODO: ver donde se almacena
|
|
||||||
app.set('api key', 'salix');
|
|
||||||
app.set('url auth', '/auth');
|
|
||||||
|
|
||||||
app.use(cookieParser());
|
|
||||||
|
|
||||||
vnLoopback.boot(app, __dirname, module);
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
[
|
||||||
|
client,
|
||||||
|
item,
|
||||||
|
ticket,
|
||||||
|
order,
|
||||||
|
claim,
|
||||||
|
route,
|
||||||
|
agency,
|
||||||
|
travel
|
||||||
|
# mailer
|
||||||
|
# print
|
||||||
|
]
|
|
@ -1,5 +0,0 @@
|
||||||
FROM vn-loopback:latest
|
|
||||||
|
|
||||||
COPY ticket /app
|
|
||||||
WORKDIR /app
|
|
||||||
CMD ["pm2-docker", "./server/server.js"]
|
|
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
"name": "vn-ticket",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"main": "server/server.js",
|
|
||||||
"scripts": {
|
|
||||||
"start": "node .",
|
|
||||||
"posttest": "npm run lint && nsp check"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"vn-loopback": "file:../loopback"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.verdnatura.es/salix"
|
|
||||||
},
|
|
||||||
"license": "GPL-3.0",
|
|
||||||
"description": "vn-ticket"
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
|
|
||||||
var vnLoopback = require('vn-loopback/server/server.js');
|
|
||||||
|
|
||||||
var app = module.exports = vnLoopback.loopback();
|
|
||||||
vnLoopback.boot(app, __dirname, module);
|
|
|
@ -1,6 +0,0 @@
|
||||||
FROM vn-loopback:latest
|
|
||||||
|
|
||||||
COPY travel /app
|
|
||||||
WORKDIR /app
|
|
||||||
CMD ["pm2-docker", "./server/server.js"]
|
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
"name": "vn-travel",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"main": "server/server.js",
|
|
||||||
"scripts": {
|
|
||||||
"start": "node .",
|
|
||||||
"posttest": "npm run lint && nsp check"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"vn-loopback": "file:../loopback"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.verdnatura.es/salix"
|
|
||||||
},
|
|
||||||
"license": "GPL-3.0",
|
|
||||||
"description": "vn-travel"
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
var vnLoopback = require('vn-loopback/server/server.js');
|
|
||||||
|
|
||||||
var app = module.exports = vnLoopback.loopback();
|
|
||||||
vnLoopback.boot(app, __dirname, module);
|
|
|
@ -5,8 +5,8 @@ const merge = require('webpack-merge');
|
||||||
const AssetsWebpackPlugin = require('assets-webpack-plugin');
|
const AssetsWebpackPlugin = require('assets-webpack-plugin');
|
||||||
const wpConfig = require('./webpack.config.yml');
|
const wpConfig = require('./webpack.config.yml');
|
||||||
|
|
||||||
let mode = process.env.NODE_ENV;
|
let env = process.env.NODE_ENV || 'development';
|
||||||
mode = mode == 'production' ? mode : 'development';
|
let mode = env == 'development' ? env : 'production';
|
||||||
|
|
||||||
let outputPath = path.join(__dirname, wpConfig.buildDir);
|
let outputPath = path.join(__dirname, wpConfig.buildDir);
|
||||||
|
|
||||||
|
@ -56,10 +56,10 @@ let baseConfig = {
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
optimization: {
|
optimization: {
|
||||||
|
runtimeChunk: true,
|
||||||
splitChunks: {
|
splitChunks: {
|
||||||
chunks: 'all',
|
chunks: 'all',
|
||||||
},
|
}
|
||||||
runtimeChunk: true
|
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
modules: [
|
modules: [
|
||||||
|
@ -79,6 +79,7 @@ let baseConfig = {
|
||||||
devtool: 'source-map',
|
devtool: 'source-map',
|
||||||
stats: {
|
stats: {
|
||||||
modules: false,
|
modules: false,
|
||||||
|
assets: false,
|
||||||
colors: true
|
colors: true
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -103,7 +104,7 @@ let devConfig = {
|
||||||
chunkFilename: '[id].js'
|
chunkFilename: '[id].js'
|
||||||
},
|
},
|
||||||
devServer: {
|
devServer: {
|
||||||
host: '127.0.0.1',
|
host: 'localhost',
|
||||||
port: wpConfig.devServerPort,
|
port: wpConfig.devServerPort,
|
||||||
publicPath: '/',
|
publicPath: '/',
|
||||||
contentBase: wpConfig.buildDir,
|
contentBase: wpConfig.buildDir,
|
||||||
|
@ -114,5 +115,5 @@ let devConfig = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let mrgConfig = mode === 'production' ? prodConfig : devConfig;
|
let mrgConfig = mode === 'development' ? devConfig : prodConfig;
|
||||||
module.exports = merge(baseConfig, mrgConfig);
|
module.exports = merge(baseConfig, mrgConfig);
|
||||||
|
|
Loading…
Reference in New Issue