window.$
зарезервирован в svelte, поэтому вы должны исправить свою библиотеку
, чтобы использовать jQuery в режиме без конфликтов, вроде
sed -E 's/(\W?)\$(\W)/\1jQuery\2/g' library.js >library.noconflict.js
заменить $(
на jQuery(
и $.
на jQuery.
(\W?)
соответствует необязательному символу, не являющемуся словом (пробелы, скобки),
во избежание замены func_$(
на func_jQuery(
\$(\W)
соответствует $(
или $.
, или или $)
, или $
, или ....
в моем случае мне пришлось патчить goldenlayout.js
версию 1.5.9, например
sed -E 's/(\W?)\$(\W)/\1jQuery\2/g' \
node_modules/golden-layout/dist/goldenlayout.js \
>src/goldenlayout-1.5.9.noconflict.js
также пришлось заменить
(function($){
// ....
define( [ 'jquery' ], function( jquery ) {
$ = jquery;
return lm.LayoutManager;
} ); // jshint ignore:line
// ....
} );})(window.$);
с участием
(function(){
// ....
define( [], function() {
return lm.LayoutManager;
} ); // jshint ignore:line
// ....
} );})();
перед запуском sed
, чтобы избежать затенения переменных
в этом случае локальное jQuery
против глобального window.jQuery
sed
может заменить слишком много (содержимое строки)
, поэтому в идеале выполните преобразование AST, например
// tools/patch-goldenlayout.js
// pnpm i -D acorn estree-walker magic-string
const input_file = "../node_modules/golden-layout/dist/goldenlayout.js";
const output_file = "../src/goldenlayout.noconflict.js";
const id_search = '$';
const id_replace = 'jQuery';
const acorn_parse = require("acorn").parse;
const estree_walk = require("estree-walker").walk;
const magicString = require("magic-string");
const fs = require("fs");
const code_old = fs.readFileSync(input_file, 'utf8');
let code = new magicString(code_old);
const ast = acorn_parse( code_old, {
sourceType: 'module', ecmaVersion: 11 /* year 2020 */ });
estree_walk( ast, {
enter: function ( node, parent, prop, index ) {
if (node.type == 'Identifier' && node.name == id_search) {
code.overwrite(node.start, node.end, id_replace);
}
}});
fs.writeFileSync(output_file, code.toString());
person
Mila Nautikus
schedule
22.08.2020