Tout d'abord, je voudrais dire la différence entre le commonJS
et commonJS2
CommonJS
ne supporte pas l'utilisation de module.exports = function() {}
qui est utilisé par node.js
et bien d'autres commonJS
mises en œuvre.
Webpack2
utilise le concept de la vente liée le code de la bibliothèque et l'utilisation généralisée de celui-ci et de le rendre compatible de travailler dans des environnements différents, nous utilisons l'option - libraryTarget
Maintenant la partie ici répondra à vos deux questions
Les options de bibliothèque possibles pris 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
Int erlop a la signification suivante
Afin d'encourager l'utilisation des CommonJS et ES6 modules, lors de l'exportation d'un default export
sans autre exports
module.exports
sera mis en plus exports["default"]
comme indiqué dans l'exemple suivant
export default test;
exports["default"] = test;
module.exports = exports["default"];
donc, fondamentalement, cela signifie que le commonJS-module
peut être utilisé par exposant comme module.exports
en utilisant le interloping
avec le module ES2015 enveloppé dans CommonJS
Plus d'informations sur le interloping
se trouve dans cette blogpost et le stackoverflow link à lui.
L'idée de base est ES6
exportation d'exécution et les propriétés d'importation ne peut pas être modifié mais commonJS
cela fonctionne bien comme nécessitent des changements se produisent lors de l'exécution donc il a ES2015 est interloped avec le communJS.
Mise à jour
Webpack 2donne la possibilité de créer la bibliothèque qui peut être empaqueté et inclus.
Si vous souhaitez que votre module soit utilisé dans différents environnements , vous pouvez l'assembler en tant que bibliothèque en ajoutant les options de bibliothèque et en les affichant dans votre environnement spécifique. Procédure mentionnée dans le docs.
Un autre exemple simple sur la façon d'utiliser CommonJS-module
point important à noter ici est babel
ajoute exports.__esModule = true
à chaque es6 module
et sur l'importation qu'elle appelle la _interopRequire
pour vérifier cette propriété.
__esModule = true
besoin d'être défini uniquement sur bibliothèque exportation. Il doit être défini sur le exports
du module d'entrée . Les modules internes n'ont pas besoin de __esModule
, c'est juste un hack babel.
Comme indiqué dans la documentation
__esModule
est défini (il est filetée comme ES2015 Module en Mode PIA)
Utilisation comme mentionné dans le test cases
export * from "./a";
export default "default-value";
export var b = "b";
import d from "library";
import { a, b } from "library";
Le problème que j'ai trouvé en important directement 'src/index.js' est que cela ne fonctionne pas si la source originale est en train d'importer des images, sass, etc. puisque vos chargeurs dans webpack.config vont normalement exclure' node_modules' pour ces fichiers les types. – row1
node_modules exclus de babel-loader, puisque les bibliothèques expédiées déjà transpilées nous n'avons pas besoin de babel là-bas. Si la source a besoin d'importer des images ou d'autres éléments, la configuration doit être étendue avec un chargeur approprié, par exemple un chargeur de fichiers ou un chargeur sass avec des paramètres pour inclure des modules nodaux si nécessaire. Les images de référence ou les bonnes pratiques css consistent à copier tout le contenu statique dans le dossier statique de votre application. –