meettya / clinch Goto Github PK
View Code? Open in Web Editor NEWYA CommonJS to browser packer tool, well-suited for widgets by small overhead and big app by smart settings and fast process.
License: Other
YA CommonJS to browser packer tool, well-suited for widgets by small overhead and big app by smart settings and fast process.
License: Other
Need to check and fix strange behavior.
At dendrite
// /Users/meettya/git_hub/dendrite/lib/dendrite.js
// Generated by CoffeeScript 1.7.1
and
// /Users/meettya/git_hub/dendrite/web_modules/lodash.coffee
(without CS version)
У нас возникла проблема с установкой Clinch на SunOS. Фактически проблема сводится к тому, что node-xxhash написан на C++, и корректно скомпилировать его без магии не возможно. Для использования clinch на нашем сервере приходится компилировать node-xxhash вручную, а затем копировать все в node_modules. Конечно, это очень не удобно.
Возможно ли заменить node-xxhash на какую-либо альтернативу, не требующую компиляции?
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?
Случилось так что мимо теста пролетела ситуация с потерянным контекстом вызова модуля.
Оказались неработоспособными конструкции вида
module.exports = @_
Баг признается критическим, будет закрыт сегодня же.
Пытаюсь подключить selection-save-restore
, но получаю ошибку:
Uncaught Error: no one module resolved, name - |uid|, parent - |Z2ePfnr|
Попробовал подебажить — в клинче, в зависимостях selection-save-restore
хранится только debug
, но нет uid
. Если написать вместо uid
саму функцию, которая реквайрится — все работает отлично.
Пробовал подключить 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)
Скобочка ставится на той же строке, что и комментарий. Поэтому возникает syntax error
// Заглушка},
dependencies out-of-date
, build failing
.
Мне нужно собрать несколько пакетов: 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.
// 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, _);
// ...
Я написал вотчер, который компилирует бандл при изменениях. Но он роняет всю ноду, если в компилируемых файлах есть синтаксическая ошибка и не выводит никакой информации о том, где ошибка произошла.
Есть ли возможность избежать падения node при подобных ошибках?
Имелось в виду buildPackage
? Может поменять название на buildPackage
, а buldPackage
сделать ссылкой на него для совместимости?
Now errors while process data just ignored, with CoffeScript and React .jsx
its complitly wrong.
React is amazing V-part in MVC, so I think about add it in "inbox" support
Решил написать плагин для grunt-js. Начерно уже сделал. Что думаешь по этому поводу?
Если тут есть RequireJS, то было бы логичным написать и в рабочую группу CommonJS и о Clinch.
Cleanup generated files to wipe out repeated __hasProp, __extends, __bind in sources and add it to header (or in runtime.js if 'bare' selected).
Предлагаю сделать 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 to reduce repeating boilerplate header code in case of some 'clinched' file used in client-side.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.