Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@fritx
Last active December 6, 2016 10:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fritx/38609ea0590e4de532e25d1ecfd24b69 to your computer and use it in GitHub Desktop.
Save fritx/38609ea0590e4de532e25d1ecfd24b69 to your computer and use it in GitHub Desktop.
10月项目笔记

[1027] 如何在webpack/react环境中引入at.js
ichord/At.js#411
要在react中加jquery本就别扭 更何况加的是jquery插件
一时无法摆脱jq 只能注意解决摩擦之处

class EditorForm extends Component {
  componentDidUpdate () {
    const { members } = this.props
    $('#editor').atwho({ at: '@', data: members })
  }
}
// wrong
import $ from 'jquery'
import 'jquery.caret'
import 'at.js/dist/css/jquery.atwho.css'
import 'at.js'

// correct
import $ from 'jquery'
import 'jquery.caret'
import '../fork/jquery.atwho.css' // custom styles
import '../fork/jquery.atwho.js' // some fix
// ../fork/jquery.atwho.js
App.prototype.onKeydown = function(e) {
  // ...
    case KEY_CODE.SPACE:
      // ...
      if (view.highlighted()) {
        e.preventDefault();

+        // fix: conflict with react EditorForm onKeyDown
+        // hitting enter also submits form
+        e.stopPropagation(); // added

        view.choose(e);
      } else {
        view.hide(e);
      }
}
// ...
Controller.prototype.lookUp = function(e) {
    var query, wait;

+    // fix: composite `@`+ Chinese character
+    // TypeError: Cannot read property 'which' of undefined
+    // at EditableController.catchQuery (jquery.atwho.js?:727:12)
+    // at EditableController.Controller.lookUp
+    if (!e) return; // added

--

[1025] mac pkg script open应用 tmpdir竟不存在
初次open os.tmpdir=/private/tmp/PKInstallSandbox.XXXXXX/tmp/
但是已经或即将被销毁 注意确保创建
否则部分功能可能受影响 因为一般假定tmpdir必然存在

# scripts/postinstall
# touch "${TMPDIR}/.keep"  # <-- 这句也无济于事
open '/Applications/Genius.app'
// × 甚至nwapp初始化时创建 也无法避免销毁
// main-0.js
// fs.ensureDirSync(os.tmpdir())

// √ 应该在具体调用时确保 很难做到
fs.ensureDirSync(dirname(file))
screencapture(file)
// √ 折中 我选择了重写tmpdir
// 并且需要养成一个好习惯 永远都是用到时才调tmpdir()
// 而不是长期缓存一个变量`dir = tmpdir()`
os.tmpdir = (fn => {
  return function tmpdir () {
    const dir = fn()
    fs.ensureDirSync(dir)
    return dir
  }
})(::os.tmpdir)

--

[1020] 通配符过滤移除文件 小记
https://github.com/sindresorhus/del#beware
http://unix.stackexchange.com/questions/1168/how-to-glob-every-hidden-file-except-current-and-parent-directory

del基于globby,node-glob,minimatch
关于取反 **匹配所有children以及parent 需要显示取反
关于隐藏文件 .* * 分别匹配所有隐藏和非隐藏文件

// wrong
del([
  `${crsa}/**`,
  `!${crsa}/index.js`,
  `!${crsa}/node_modules/bindings/**`,
  `!${crsa}/build/Release/addon.node`,
])

// right
del([
  `${crsa}/**/{*,.*}`,
  `!${crsa}`,
  `!${crsa}/index.js`,
  `!${crsa}/node_modules`,
  `!${crsa}/node_modules/bindings/**`,
  `!${crsa}/build`,
  `!${crsa}/build/Release`,
  `!${crsa}/build/Release/addon.node`,
])

--

[1011] db迁移 数据分批导入

  • 数据库加密win/mac
  • 数据库/表依次迁移逻辑
  • 数据库init/upgrade逻辑封装
  • 记录迁移filter判断
  • 单条插入语句拼接
  • 记录分批量迁移
async function migrate (from, to, filter) {
  // ...
  for (let { name, sql } of tables) {
    // ...
    // 避免大小超出限制 数据分批导入
    const pageSize = 1000
    /* eslint-disable no-constant-condition */
    for (let i = 0; true; i++) {
      const rows = await t2p(cb => {
        from.all(`SELECT * FROM "${name}"
          ${condition}
          LIMIT ${pageSize}
          OFFSET ${i * pageSize}`, cb)
      })
      if (rows.length <= 0) break

      const row0 = rows[0]
      const keys = rowKeys(row0)
      const keyHolder = keys.join(',')

      // 拼接成一条sql 速度快
      const valuesHolder = rows.reduce((m, row) => {
        const values = rowValues(keys, row)
        return m.push('(' + values.map(escape).join(', ') + ')'), m
      }, []).join(', ')
      sql = `INSERT OR REPLACE INTO "${name}" (${keyHolder}) VALUES ${valuesHolder}`
      await t2p(cb => to.run(sql, cb))
      console.log(`migrated table ${name} rows * ${rows.length}`)
    }
    console.log(`migrated table ${name} finish`)
  }
  // ...
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment