手动打开127.0.0.1:8080访问或者通过本机局域网地址+端口号:8080访问,如果无效,手动运行 fis3 server stop, 然后再次运行命令端口号即可重置为8080,也可以直接运行fis3 server info 查看目前fis3在哪个端口运行
fis3 server start && fis3 release -wL
fis3 server start -p 8088 && fis3 release -wL
// 1.file name: fis-conf.js
// 2.install plugin: npm install -g fis-parser-less
fis.match('*.less', {
parser: fis.plugin('less'),
rExt: '.css'
})
- with open module
var package = require("./package.json");
/**
* 全局变量
*/
fis
.set('project.files', [ // 处理的文件类型
'**.{css,less,html,php,js,png,jpg,gif,ico}'
])
.set('project.ignore', [ // 忽略的文件
'package.json',
'node_modules/**',
'bower.json',
'bower_components/**',
'inc/**',
'**/_*.*',
'_output', //不使用用
'fis-conf.js',
'sftp-config.json'
])
.set('project.ext', {
less: 'css',
sass: 'css'
});
fis
.match(/\.less$/i, {
rExt: '.css', // from .less to .css
parser: [fis.plugin('jdists'), fis.plugin('less')]
}).match(/\.(js|html|php|css)$/i, {
parser: fis.plugin('jdists')
}).match(/([^\/\\]+\.(css|less))$/i, {
release: 'css/$1',
postprocessor: fis.plugin('autoprefixer')
});
/**
* online 上线版本
*/
fis.media('online')
.match(/\.(png)$/i, {
optimizer: fis.plugin('tinify', { // 图片压缩
key: [
"oU11g_0IWh86-wkrNE1Z-wGchgBk3zGQ",
"UvQbkRDVKFAqP4Gz4W4CcBpc8LITtfd4",
"vPhKEx0a6_UZN1Aylky_Lz59m3uUDH38",
"CR25kPWD2NV8sViEjfgY7JEPuhWt_TmF",
"r5qVHDrXzRNCi0abuMSHKNw4CJHXOLLi",
"kqsvwgRVhpnG2DJNTIOJxVYVOmrBE08z",
"fg4M4iggxPEQYI3EMj6Owe0NiXq35Wpu"
],
cacheDir: __dirname + '/.cache'
})
})
.match(/\.(js|css|html|php)$/i, {
parser: fis.plugin('jdists', {
trigger: 'release'
}),
}).match(/([^\/\\]+\.js)$/i, {
optimizer: fis.plugin('uglify-js', {
ascii_only: true
})
}).match(/([^\/\\]+\.(css|less))$/i, {
optimizer: fis.plugin('clean-css')
}).match(/\.(js|css|less|png|jpg|gif|ico)$/i, { // 发布到 CDN
useHash: true,
domain: 'http:/static/' + package.name,
deploy: fis.plugin('http-push2', {
receiver: 'http://.77:9090/receiver?token=d473ef4214ce8657891b708f9d2a2303',
to: '/static/' + package.name,
cacheDir: __dirname + '/.cache'
})
}).match('index.html', { // 发布到后端模板
deploy: fis.plugin('http-push2', {
receiver: 'http://receiver?token=d473ef421491b7sjdfhreheh9d2a2303',
to: '/home/w/templates/vip'
})
});
/**
* 本机测试版本
*/
fis.media('debug')
.match(/\.(js|css|html|php)$/i, {
parser: fis.plugin('jdists', {
trigger: 'local'
})
});
function hostname() {
var ip = false;
var net = require('os').networkInterfaces();
Object.keys(net).every(function(key) {
var detail = net[key];
Object.keys(detail).every(function(i) {
var address = String(detail[i].address).trim();
if (address && /^\d+(?:\.\d+){3}$/.test(address) && address !== '127.0.0.1') {
ip = address;
}
return !ip; // 找到了,则跳出循环
});
return !ip; // 找到了,则跳出循环
});
return ip || 'unknown';
}
//----------------------------------
// @see open@0.0.4
var exec = require('child_process').exec;
var path = require('path');
function open(target, appName, callback) {
function escape(s) {
return s.replace(/"/g, '\\\"');
}
var opener;
if (typeof(appName) === 'function') {
callback = appName;
appName = null;
}
switch (process.platform) {
case 'darwin':
if (appName) {
opener = 'open -a "' + escape(appName) + '"';
} else {
opener = 'open';
}
break;
case 'win32':
// if the first parameter to start is quoted, it uses that as the title
// so we pass a blank title so we can quote the file we are opening
if (appName) {
opener = 'start "" "' + escape(appName) + '"';
} else {
opener = 'start ""';
}
break;
default:
if (appName) {
opener = escape(appName);
} else {
// use Portlands xdg-open everywhere else
opener = path.join(__dirname, '../vendor/xdg-open');
}
break;
}
return exec(opener + ' "' + escape(target) + '"', callback);
}
//-----------------------
var util = require('util');
function openUrl() {
String(package.scripts.debug).replace(/-p\s*(\d+)\s*&&/, function(all, port) {
setTimeout(function() {
open(util.format('http://%s:%s/index.php', hostname(), port));
});
});
}
if (!(/-w?L/.test(process.argv)) &&
fis.project.currentMedia() === 'debug') { // 存在监听
fis.once('release:end', openUrl);
}
{
"name": "",
"version": "0.0.0",
"description": "",
"private": true,
"devDependencies": {},
"dependencies": {},
"scripts": {
"debug": "fis3 server start --type php --no-browse -p 8088 && fis3 release debug -c && fis3 release debug -wL",
"online": "npm run _update_version && fis3 release ifreetalk -c"
}
}
fis
.set('project.files', [ // 处理的文件类型
'**.{css,less,html,php,js,png,jpg,gif,ico}'
])
.set('project.ignore', [ // 忽略的文件
'package.json',
'node_modules/**',
'bower.json',
'bower_components/**',
'inc/**',
'**/_*.*',
'_output', //不使用用
'fis-conf.js',
'sftp-config.json'
])
.set('project.ext', {
less: 'css',
sass: 'css'
});
fis
.match(/\.less$/i, {
rExt: '.css', // from .less to .css
parser: [fis.plugin('jdists'), fis.plugin('less')]
}).match(/\.(js|html|php|css)$/i, {
parser: fis.plugin('jdists')
}).match(/([^\/\\]+\.(css|less))$/i, {
release: 'css/$1',
postprocessor: fis.plugin('autoprefixer')
});
var package = require('./package.json');
console.log(package.version);
var mainVersion = package.version.replace(/\.\d+$/, '');
/**
* online 上线版本
*/
fis.media('online')
.match(/\.(png)$/i, {
optimizer: fis.plugin('tinify', {
key: [
"oU11g_0IWh86-wkrNE1Z-wGchgBk3zGQ",
"UvQbkRDVKFAqP4Gz4W4CcBpc8LITtfd4",
"vPhKEx0a6_UZN1Aylky_Lz59m3uUDH38",
"CR25kPWD2NV8sViEjfgY7JEPuhWt_TmF",
"r5qVHDrXzRNCi0abuMSHKNw4CJHXOLLi",
"kqsvwgRVhpnG2DJNTIOJxVYVOmrBE08z",
"fg4M4iggxPEQYI3EMj6Owe0NiXq35Wpu"
],
cacheDir: __dirname + '/.cache'
})
})
.match(/\.(js|css|html|php)$/i, {
parser: fis.plugin('jdists', {
trigger: 'release'
}),
}).match(/([^\/\\]+\.js)$/i, {
optimizer: fis.plugin('uglify-js', {
ascii_only: true
})
}).match(/([^\/\\]+\.(css|less))$/i, {
optimizer: fis.plugin('clean-css')
}).match(/\.(js|css|less|png|jpg|gif|ico)$/i, {
useHash: true,
domain: 'http://s.com/static/',
deploy: fis.plugin('http-push2', {
receiver: 'http://:9090/receiver?token=d473ef421403',
to: '/homem/web_resource/static/',
cacheDir: __dirname + '/.cache'
})
}).match(/\.(html|php)$/i, {
deploy: fis.plugin('http-push2', {
receiver: 'http://0/receiver?token=ex4dgzoxbt9',
to: '/homeme',
cacheDir: __dirname + '/.cache'
})
}).match('config/config.php', {
release: false
})
.match('config/online.config.php', {
release: 'config/config.php'
}).match('::package', {
postpackager: fis.plugin('loader', {
allInOne: true
})
});
/**
* dubuge 测试版本
*/
fis.media('debug')
.match(/\.(js|css|html|php)$/i, {
parser: fis.plugin('jdists', {
trigger: 'local'
})
});
function hostname() {
var ip = false;
var net = require('os').networkInterfaces();
Object.keys(net).every(function(key) {
var detail = net[key];
Object.keys(detail).every(function(i) {
var address = String(detail[i].address).trim();
if (address && /^\d+(?:\.\d+){3}$/.test(address) && address !== '127.0.0.1') {
ip = address;
}
return !ip; // 找到了,则跳出循环
});
return !ip; // 找到了,则跳出循环
});
return ip || 'unknown';
}
function open() {
setTimeout(function() {
var url = 'http://' + hostname() + ':8083/citylist.php';
require('open')(url);
});
}
if (!(/-w?L/.test(process.argv)) &&
fis.project.currentMedia() === 'debug') { // 存在监听
fis.once('release:end', open);
}