Je voudrais tout d'abord l'état de la différence entre le commonJS
et commonJS2
CommonJS
ne prend pas en charge l'utilisation de l' module.exports = function() {}
qui est utilisée par node.js
et de nombreux autres commonJS
des implémentations.
Webpack2
utilise le concept de regroupement le code de la bibliothèque et pour la généralisation de l'utilisation de l'informatique et de la rendre compatible de travailler dans des environnements différents, nous utilisons l' --libraryTarget option
Maintenant, la partie permettra de répondre à la fois à vos questions
La possible bibliothèque d'options de prise en charge dans webpack2
sont
libraryTarget: "umd", // enum
libraryTarget: "umd-module", // ES2015 module wrapped in UMD
libraryTarget: "commonjs-module", // ES2015 module wrapped in CommonJS
libraryTarget: "commonjs2", // exported with module.exports
libraryTarget: "commonjs", // exported as properties to exports
libraryTarget: "amd", // defined with AMD defined method
libraryTarget: "this", // property set on this
libraryTarget: "var", // variable defined in root scope
Interlop a la signification suivante
Afin d'encourager l'utilisation de CommonJS et ES6 modules, lors de l'exportation d'un default export
avec aucune autre exports
module.exports
sera mis en plus d' exports["default"]
comme indiqué dans l'exemple suivant
export default test;
exports["default"] = test;
module.exports = exports["default"];
Donc, fondamentalement, cela signifie que l' commonJS-module
peut être utilisé par les exposant comme module.exports
par l'aide de la interloping
avec ES2015 module enveloppé dans commonJS
Plus d'infos sur l' interloping
peut être trouvé dans cet article sur le blog et le stackoverflow lien vers elle.
L'idée de base est de ES6
d'exécution à l'exportation et à l'importation les propriétés ne peuvent pas être modifiés , mais, en commonJS
cela fonctionne bien comme l' exigent les changements surviennent au moment de l'exécution , il a donc ES2015 est interloped avec le commonJS.
Mise à jour
Webpack 2 donne la possibilité de créer de la bibliothèque, qui peuvent être fournis et inclus.
Si vous voulez que votre module pour être utilisé dans des environnements différents, alors vous pouvez regrouper comme une bibliothèque en ajoutant les options de bibliothèque et de sortie à votre environnement spécifique. Procédure mentionnée dans les docs.
Un autre exemple simple sur la façon d'utiliser commonjs-module
Point Important à noter ici, c'est - babel
ajoute exports.__esModule = true
chaque es6 module
et sur l'importation d'elle en appelle à l' _interopRequire
pour vérifier cette propriété.
__esModule = true
besoin d'être réglé uniquement sur l'export de la bibliothèque. Il doivent être définies dans l' exports
du module d'entrée. Intérieure modules n'avez pas besoin d' __esModule
, c'est juste une babel hack.
Comme indiqué dans les docs
__esModule
est défini (c'est filetée comme ES2015 Module d'interopérabilité de mode)
Utilisation comme mentionné dans le cas de test
export * from "./a";
export default "default-value";
export var b = "b";
import d from "library";
import { a, b } from "library";