Code Monkey home page Code Monkey logo

clinch's People

Contributors

meettya avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

gitter-badger

clinch's Issues

Замена node-xxhash

У нас возникла проблема с установкой Clinch на SunOS. Фактически проблема сводится к тому, что node-xxhash написан на C++, и корректно скомпилировать его без магии не возможно. Для использования clinch на нашем сервере приходится компилировать node-xxhash вручную, а затем копировать все в node_modules. Конечно, это очень не удобно.

Возможно ли заменить node-xxhash на какую-либо альтернативу, не требующую компиляции?

add // clinch require begin\end statement processor

To dramatically speed up compilation time I'l to plan add 'chittng' statement for 'require' searching processor.
The each file will be watched (with RegExp) for string (strictly!!! - comment at start of string)
// clinch require begin
and only content till
// clinch require end
will be parsed to find out 'require' statiment in it.

If statement not be founded - all file will be parsed, as it worked now.

Oh! also this pair may be used on standalone files to suppress parsing process.

Its seems reasonable use one statement pair only, but may be someone have another idea?

Missing 'this' with runtime v2 + packer

Случилось так что мимо теста пролетела ситуация с потерянным контекстом вызова модуля.

Оказались неработоспособными конструкции вида

module.exports = @_

Баг признается критическим, будет закрыт сегодня же.

Не разрешается зависимость модуля

Пытаюсь подключить selection-save-restore, но получаю ошибку:

Uncaught Error: no one module resolved, name - |uid|, parent - |Z2ePfnr| 

Попробовал подебажить — в клинче, в зависимостях selection-save-restore хранится только debug, но нет uid. Если написать вместо uid саму функцию, которая реквайрится — все работает отлично.

Не могу компилировать jade, чтобы работало и в ноде и в браузере.

Пробовал подключить jade_powered, либо писать свою функцию, которая проверяет module.id, и исходя из этого либо делает require шаблона, либо компилирует его через jade и fs.
Если я подключаю fs и jade, то у меня в браузере получается синтаксическая ошибка:

Uncaught SyntaxError: Unexpected token ( 

На node все работает ок.

Попробовал запустить тесты в clinch:

3 failing

  1) Clinch app itself: buldPackage() should build package:
     ReferenceError: global is not defined
      at evalmachine.<anonymous>:1:289
      at evalmachine.<anonymous>:1:306
      at Context.<anonymous> (/Users/shuvalov/Desktop/book-core/node_modules/clinch/test/test_app.coffee:51:12)
      at Test.Runnable.run (/usr/local/share/npm/lib/node_modules/mocha/lib/runnable.js:194:15)
      at Runner.runTest (/usr/local/share/npm/lib/node_modules/mocha/lib/runner.js:355:10)
      at /usr/local/share/npm/lib/node_modules/mocha/lib/runner.js:401:12
      at next (/usr/local/share/npm/lib/node_modules/mocha/lib/runner.js:281:14)
      at /usr/local/share/npm/lib/node_modules/mocha/lib/runner.js:290:7
      at next (/usr/local/share/npm/lib/node_modules/mocha/lib/runner.js:234:23)
      at Object._onImmediate (/usr/local/share/npm/lib/node_modules/mocha/lib/runner.js:258:5)

  2) Packer: buldPackage() should build pack with real npm modules:
     Uncaught Error: no one module resolved, name - |util|, parent - |804936915|
      at Error (<anonymous>)
      at name_resolver (evalmachine.<anonymous>:13:11)
      at require (evalmachine.<anonymous>:20:21)
      at evalmachine.<anonymous>:26:12
      at sources.804936915 (evalmachine.<anonymous>:96:12)
      at require (evalmachine.<anonymous>:25:17)
      at evalmachine.<anonymous>:26:12
      at sources.4160175526 (evalmachine.<anonymous>:481:11)
      at require (evalmachine.<anonymous>:25:17)
      at evalmachine.<anonymous>:26:12

  3) Clinch and template engines: jade: should work in browser (emulation):
     ReferenceError: global is not defined
      at evalmachine.<anonymous>:1:289
      at evalmachine.<anonymous>:1:306
      at Context.<anonymous> (/Users/shuvalov/Desktop/book-core/node_modules/clinch/test/test_template_engine.coffee:50:12)
      at Test.Runnable.run (/usr/local/share/npm/lib/node_modules/mocha/lib/runnable.js:194:15)
      at Runner.runTest (/usr/local/share/npm/lib/node_modules/mocha/lib/runner.js:355:10)
      at /usr/local/share/npm/lib/node_modules/mocha/lib/runner.js:401:12
      at next (/usr/local/share/npm/lib/node_modules/mocha/lib/runner.js:281:14)
      at /usr/local/share/npm/lib/node_modules/mocha/lib/runner.js:290:7
      at next (/usr/local/share/npm/lib/node_modules/mocha/lib/runner.js:234:23)
      at Object._onImmediate (/usr/local/share/npm/lib/node_modules/mocha/lib/runner.js:258:5)

buldPackageSync

Мне нужно собрать несколько пакетов: main.js который используется в одной части сайта и other.js, который используется в другой части сайта. Для сборки я вызываю клинч несколько раз подряд. Проблема в том, что функция done() выполняется гораздо раньше, чем файлы будут сгенерированы.
Хотелось бы иметь метод buldPackageSync для решения подобных проблем.

'use strict'; 

/**
 * Module dependencies.
 */
var config    = require('../lib/util').config;
var log       = require('../lib/util').log(module);
var util      = require('util');
var fs        = require('fs');
var Clinch    = require('clinch');
var rootDir   = process.env.PWD;
var extend    = require('shortcode-params');

// End of dependencies


var Compilation = function(params) {

  this.defaults = {
    package_name: undefined,
    main: undefined,
    out: undefined,
    replacement: {},
    strict : 'on',
    inject : 'on',
    cache_modules: 'on'
  };

  this.params = extend(this.defaults, params);
  this.compile(this.params, done);

};


Compilation.prototype.compile = function(params) {

  var clinch = new Clinch();

  this.package_config = {
    bundle: {
      main: params.main
    },
    strict : params.strict,
    inject : params.inject,
    package_name: params.package_name,
    replacement: params.replacement,
    cache_modules: params.cache_modules
  };


  clinch.buldPackage(this.package_config, function(err, data) {
    console.log('2');
    log.info('%s starts to compiling!', params.package_name);
    err 
      ? log.error(err.toString())
      : fs.writeFileSync(params.out, data)
        , log.info('%s compiled!', params.package_name)
  });

};

// End of Compilation.


module.exports = function(done) {
  var modules = config.get('clinch');
  for (var key in modules) new Compilation(modules[key]);
  done();
};

config.json:

 "clinch": {

    "editor": {
      "package_name": "Book Editor",
      "main": "./client/book-editor.js",
      "out": "./client/public/assets/js/book-editor.js",
      "replacement": {
        "jade": "./client/lib-client/nothing.js",
        "fs": "./client/lib-client/nothing.js",
        "async": "./client/public/assets/vendors/async.js"
      }
    },

    "site": {
      "package_name": "Site JS",
      "main": "./client/site.js",
      "out": "./client/public/assets/js/site.js",
      "replacement": {

      }
    }
  },

Не подключается underscore к backbone из-за отсутствия module.exports

Не подключается underscore к backbone.

// underscore
// ...
  if (typeof exports !== 'undefined') {
    if (typeof module !== 'undefined' && module.exports) {
      // Не отрабатывает
      exports = module.exports = _;
    }
    // выполняется только этот код.
    exports._ = _;
  } else {
    root._ = _;
  }
// ...
// backbone
// ...
  // Next for Node.js or CommonJS. jQuery may not be needed as a module.
  } else if (typeof exports !== 'undefined') {
    var _ = require('underscore'); // А `_` на самом деле это  require('underscore')._ из-за `!module.exports`
    factory(root, exports, _);

// ...

Catch syntax errors

Я написал вотчер, который компилирует бандл при изменениях. Но он роняет всю ноду, если в компилируемых файлах есть синтаксическая ошибка и не выводит никакой информации о том, где ошибка произошла.
Есть ли возможность избежать падения node при подобных ошибках?

Лог

Clinch CLI

Предлагаю сделать CLI для Clinch, чтобы пакет можно было устанавливать глобально, и использовать, к примеру, так:

$ clinch --strict --inject --runtime ./_src/index.js  > ./dest/out.js

Предлагаю добавить кэширование модулей

Столкнулись с такой проблемой: мы создаём объектную структуру нашего проекта, где каждый класс определяется через прототипы.
Соответственно, имеем модули такой структуры:

var customObj = function () { ... }
customObj.prototype.foo = function () { ... }

Это всё обёрнуто в CommonJS модули.
Когда мы собираем файлы с помощью clinch, наши модули оборачиваются в функции и вызываются каждый раз, когда мы делаем require, из-за этого наш прототип создаётся каждый раз заново. В итоге все прелести использования прототипов пропадают.

Я предлагаю сделать возможность кэширования модулей после их подключения, и при следующем require не вызывать его снова из функции, а доставать из кэша.

Я уже попробовал внести изменение, на нашем проекте это хорошо прижилось, предлагаю внести эту возможность в основную ветку

add separate runtime.js file

Add separate runtime.js file to reduce repeating boilerplate header code in case of some 'clinched' file used in client-side.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.