如何在require.js应用程序中包含/使用此require.js模块PSD.js?
如果我使用下面这个例子的脚本,它可以正常工作:
<script type="text/javascript" src="assets/scripts/vendor/psd.min.js"></script>
<script type="text/javascript">
(function () {
var PSD = require('psd');
document.getElementById('dropzone').addEventListener('dragover', onDragOver, true);
document.getElementById('dropzone').addEventListener('drop', onDrop, true);
function onDragOver(e) {
e.stopPropagation();
e.preventDefault();
e.dataTransfer.dropEffect = 'copy';
}
function onDrop(e) {
e.stopPropagation();
e.preventDefault();
PSD.fromEvent(e).then(function (psd) {
var data = JSON.stringify(psd.tree().export(), undefined, 2);
document.getElementById('data').innerHTML = data;
document.getElementById('image').appendChild(psd.image.toPng());
});
}
}());
</script>
这是一个实例; https://jsfiddle.net/numediaweb/8zah99jw/
但是,如果我尝试通过推荐的requirejs方式来包含它,那么它就不会;
requirejs.config({
paths: {
'psd': 'vendor/psd.min'
}
});
// Load our app module 'main.js' and pass it to our definition function
requirejs(['app'], function (App) {
// The "app" dependency is passed in as "App"
App.initialize();
});
define('modules/customwidgets.add_widget', [ 'psd'], function () {
var Widget = function () {
};
Widget.prototype = {
config: {},
init: function (htmlElement) {
"use strict";
// This module
var me = this;
console.log('It loads!');
var PSD = require('psd');
document.getElementById('dropzone').addEventListener('dragover', onDragOver, true);
document.getElementById('dropzone').addEventListener('drop', onDrop, true);
function onDragOver(e) {
e.stopPropagation();
e.preventDefault();
e.dataTransfer.dropEffect = 'copy';
}
function onDrop(e) {
e.stopPropagation();
e.preventDefault();
PSD.fromEvent(e).then(function (psd) {
var data = JSON.stringify(psd.tree().export(), undefined, 2);
document.getElementById('data').innerHTML = data;
document.getElementById('image').appendChild(psd.image.toPng());
});
}
}
};
return Widget;
});
答案 0 :(得分:1)
您仍在以不推荐的方式使用它。定义模块后,只需将参数名称放入该模块的功能中即可。
或者,如果您需要使用全局库,例如JQuery
...等...请在requirejs config中使用shim
。
不管情况如何,都不要使用var something = require('module_name');
。
这是一个快速调整:
requirejs.config({
paths: {
'psd': 'vendor/psd.min'
},
// export global alias 'PSD' for 'psd.min'
shim: {
'psd': {
'exports': 'PSD'
}
}
});
define('modules/customwidgets.add_widget', ['psd'], function () {
var Widget = function () {
};
Widget.prototype = {
config: {},
init: function (htmlElement) {
"use strict";
// This module
var me = this;
console.log('It loads!');
// This should not be used.
// var PSD = require('psd');
document.getElementById('dropzone').addEventListener('dragover', onDragOver, true);
document.getElementById('dropzone').addEventListener('drop', onDrop, true);
function onDragOver(e) {
e.stopPropagation();
e.preventDefault();
e.dataTransfer.dropEffect = 'copy';
}
function onDrop(e) {
e.stopPropagation();
e.preventDefault();
PSD.fromEvent(e).then(function (psd) {
var data = JSON.stringify(psd.tree().export(), undefined, 2);
document.getElementById('data').innerHTML = data;
document.getElementById('image').appendChild(psd.image.toPng());
});
}
}
};
return Widget;
});
此调整可能无法提供100%的工作代码(??)。由于您正在使用init
方法进行原型设计并使用PSD
变量/ define块实例。当您致电PSD
和/或new Widget()
new Widget().init()
varibale /实例可能不会在其他地方提供