Skip to content

Instantly share code, notes, and snippets.

@shawndxl
Last active August 23, 2016 06:20
Show Gist options
  • Save shawndxl/e43cf45bad54104329af057435f49916 to your computer and use it in GitHub Desktop.
Save shawndxl/e43cf45bad54104329af057435f49916 to your computer and use it in GitHub Desktop.
Fis3 Useage

Fis3 Useage

本机编写代码

最简单的例子:在本地建立端口并监听

手动打开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

预编译插件:把less变成css

// 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"
  }
}

without open module

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);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment