diff --git a/examples/labeled-modules/README.md b/examples/labeled-modules/README.md deleted file mode 100644 index 0acf460fe..000000000 --- a/examples/labeled-modules/README.md +++ /dev/null @@ -1,169 +0,0 @@ -This example show how to add support for Labeled Modules by adding the plugin to the configuration. - -# example.js - -``` javascript -require: "./increment"; -var a = 1; -increment(a); // 2 -``` - -# webpack.config.js - -``` javascript -var webpack = require("../../"); -module.exports = { - plugins: [ - new webpack.dependencies.LabeledModulesPlugin() - ] -} -``` - -# increment.js - -``` javascript -require: "./math"; -exports: function increment(val) { - return add(val, 1); -}; -``` - -# math.js - -``` javascript -exports: function add() { - var sum = 0, i = 0, args = arguments, l = args.length; - while (i < l) { - sum += args[i++]; - } - return sum; -}; -``` - -# js/output.js - -``` javascript -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; - -/******/ // The require function -/******/ function __webpack_require__(moduleId) { - -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; - -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; - -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - -/******/ // Flag the module as loaded -/******/ module.l = true; - -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } - - -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; - -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; - -/******/ // identity function for calling harmory imports with the correct context -/******/ __webpack_require__.i = function(value) { return value; }; - -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "js/"; - -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 1); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/*!**********************!*\ - !*** ./increment.js ***! - \**********************/ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_LABELED_MODULE__ = __webpack_require__(/*! ./math */ 2), add = __WEBPACK_LABELED_MODULE__.add; - exports: exports["increment"] = function increment(val) { - return add(val, 1); - }; - -/***/ }, -/* 1 */ -/*!********************!*\ - !*** ./example.js ***! - \********************/ -/***/ function(module, exports, __webpack_require__) { - - var __WEBPACK_LABELED_MODULE__ = __webpack_require__(/*! ./increment */ 0), increment = __WEBPACK_LABELED_MODULE__.increment; - var a = 1; - increment(a); // 2 - -/***/ }, -/* 2 */ -/*!*****************!*\ - !*** ./math.js ***! - \*****************/ -/***/ function(module, exports, __webpack_require__) { - - exports: exports["add"] = function add() { - var sum = 0, i = 0, args = arguments, l = args.length; - while (i < l) { - sum += args[i++]; - } - return sum; - }; - -/***/ } -/******/ ]); -``` - -The remaining labels are removed while minimizing. - -# Info - -## Uncompressed - -``` -Hash: be12e2072fd7c78b192b -Version: webpack 2.1.0-beta.11 -Time: 55ms - Asset Size Chunks Chunk Names -output.js 2.5 kB 0 [emitted] main -chunk {0} output.js (main) 299 bytes [rendered] - > main [1] ./example.js - [0] ./increment.js 83 bytes {0} [built] - labeled require ./increment [1] ./example.js 1:0-23 - [1] ./example.js 55 bytes {0} [built] - [2] ./math.js 161 bytes {0} [built] - labeled require ./math [0] ./increment.js 1:0-18 -``` - -## Minimized (uglify-js, no zip) - -``` -Hash: be12e2072fd7c78b192b -Version: webpack 2.1.0-beta.11 -Time: 130ms - Asset Size Chunks Chunk Names -output.js 448 bytes 0 [emitted] main -chunk {0} output.js (main) 299 bytes [rendered] - > main [1] ./example.js - [0] ./increment.js 83 bytes {0} [built] - labeled require ./increment [1] ./example.js 1:0-23 - [1] ./example.js 55 bytes {0} [built] - [2] ./math.js 161 bytes {0} [built] - labeled require ./math [0] ./increment.js 1:0-18 -``` \ No newline at end of file diff --git a/examples/labeled-modules/build.js b/examples/labeled-modules/build.js deleted file mode 100644 index 41c29c9d1..000000000 --- a/examples/labeled-modules/build.js +++ /dev/null @@ -1 +0,0 @@ -require("../build-common"); \ No newline at end of file diff --git a/examples/labeled-modules/example.js b/examples/labeled-modules/example.js deleted file mode 100644 index 5721165e9..000000000 --- a/examples/labeled-modules/example.js +++ /dev/null @@ -1,3 +0,0 @@ -require: "./increment"; -var a = 1; -increment(a); // 2 \ No newline at end of file diff --git a/examples/labeled-modules/increment.js b/examples/labeled-modules/increment.js deleted file mode 100644 index 0406f0115..000000000 --- a/examples/labeled-modules/increment.js +++ /dev/null @@ -1,4 +0,0 @@ -require: "./math"; -exports: function increment(val) { - return add(val, 1); -}; \ No newline at end of file diff --git a/examples/labeled-modules/math.js b/examples/labeled-modules/math.js deleted file mode 100644 index e38d12194..000000000 --- a/examples/labeled-modules/math.js +++ /dev/null @@ -1,7 +0,0 @@ -exports: function add() { - var sum = 0, i = 0, args = arguments, l = args.length; - while (i < l) { - sum += args[i++]; - } - return sum; -}; \ No newline at end of file diff --git a/examples/labeled-modules/template.md b/examples/labeled-modules/template.md deleted file mode 100644 index d7f9bf946..000000000 --- a/examples/labeled-modules/template.md +++ /dev/null @@ -1,47 +0,0 @@ -This example show how to add support for Labeled Modules by adding the plugin to the configuration. - -# example.js - -``` javascript -{{example.js}} -``` - -# webpack.config.js - -``` javascript -{{webpack.config.js}} -``` - -# increment.js - -``` javascript -{{increment.js}} -``` - -# math.js - -``` javascript -{{math.js}} -``` - -# js/output.js - -``` javascript -{{js/output.js}} -``` - -The remaining labels are removed while minimizing. - -# Info - -## Uncompressed - -``` -{{stdout}} -``` - -## Minimized (uglify-js, no zip) - -``` -{{min:stdout}} -``` \ No newline at end of file diff --git a/examples/labeled-modules/webpack.config.js b/examples/labeled-modules/webpack.config.js deleted file mode 100644 index d63844ce7..000000000 --- a/examples/labeled-modules/webpack.config.js +++ /dev/null @@ -1,6 +0,0 @@ -var webpack = require("../../"); -module.exports = { - plugins: [ - new webpack.dependencies.LabeledModulesPlugin() - ] -} \ No newline at end of file diff --git a/examples/mixed/amd.js b/examples/mixed/amd.js index d0ba1cf73..72a319ed1 100644 --- a/examples/mixed/amd.js +++ b/examples/mixed/amd.js @@ -1,11 +1,10 @@ // AMD Module Format define( "app/amd", // anonym is also supported - ["./commonjs", "./labeled", "./harmony"], - function(commonjs1, labeled1, harmony1) { + ["./commonjs", "./harmony"], + function(commonjs1, harmony1) { // but you can use CommonJs-style requires: var commonjs2 = require("./commonjs"); - var labeled2 = require("./labeled"); var harmony2 = require("./harmony"); // Do something... return 456; diff --git a/examples/mixed/commonjs.js b/examples/mixed/commonjs.js index 439a3ea1d..fa5e02c72 100644 --- a/examples/mixed/commonjs.js +++ b/examples/mixed/commonjs.js @@ -3,10 +3,9 @@ module.exports = 123; // but you can use amd style requires require( - ["./amd", "./labeled", "./harmony"], - function(amd1, labeled1, harmony) { + ["./amd", "./harmony"], + function(amd1, harmony) { var amd2 = require("./amd"); - var labeled2 = require("./labeled"); var harmony2 = require("./harmony"); } ); \ No newline at end of file diff --git a/examples/mixed/example.js b/examples/mixed/example.js index 6b70f6b33..21cedcf9c 100644 --- a/examples/mixed/example.js +++ b/examples/mixed/example.js @@ -1,20 +1,14 @@ // CommonJs-style requires var commonjs1 = require("./commonjs"); var amd1 = require("./amd"); -var labeled1 = require("./labeled"); var harmony1 = require("./harmony"); // AMD-style requires (with all webpack features) require([ - "./commonjs", "./amd", "./labeled", + "./commonjs", "./amd", "../require.context/templates/"+amd1+".js", Math.random() < 0.5 ? "./commonjs" : "./amd"], - function(commonjs2, amd2, labeled2, template, randModule) { + function(commonjs2, amd2, template, randModule) { // Do something with it... } ); - -// labeled modules requires -require: "./labeled"; -// with the require label you are only allowed to import labeled modules -// the module needs static information about exports \ No newline at end of file diff --git a/examples/mixed/harmony.js b/examples/mixed/harmony.js index 6f6aaa829..6def761f8 100644 --- a/examples/mixed/harmony.js +++ b/examples/mixed/harmony.js @@ -1,6 +1,5 @@ // ES6 Modules import commonjs from "./commonjs"; import amd from "./amd"; -import labeled from "./labeled"; export default 456; diff --git a/examples/mixed/labeled.js b/examples/mixed/labeled.js deleted file mode 100644 index 7fc8ea29b..000000000 --- a/examples/mixed/labeled.js +++ /dev/null @@ -1,11 +0,0 @@ -// Labeled Module Format -exports: var a = 123; - -// but you can use amd and commonjs style requires -require( - ["./commonjs", "./amd"], - function(amd1) { - var commonjs2 = require("./commonjs"); - var amd2 = require("./amd"); - } -); \ No newline at end of file diff --git a/examples/mixed/template.md b/examples/mixed/template.md index 36cc4c1fb..0aca1c6aa 100644 --- a/examples/mixed/template.md +++ b/examples/mixed/template.md @@ -1,4 +1,4 @@ -This example shows how you can mix different module styles in webpack. Here CommonJs, AMD and Labeled Modules are used. In addition to that there are different types of dynamic requires (`"../require.context/templates/"+amd1+".js"` and `Math.random() < 0.5 ? "./commonjs" : "./amd"`). +This example shows how you can mix different module styles in webpack. Here CommonJs, AMD and Harmony Modules (ES6 Modules) are used. In addition to that there are different types of dynamic requires (`"../require.context/templates/"+amd1+".js"` and `Math.random() < 0.5 ? "./commonjs" : "./amd"`). You see that everything is working nicely together. @@ -20,13 +20,6 @@ You see that everything is working nicely together. {{commonjs.js}} ``` -# labeled.js - -``` javascript -{{labeled.js}} -``` - - # js/output.js ``` javascript diff --git a/examples/mixed/webpack.config.js b/examples/mixed/webpack.config.js deleted file mode 100644 index d63844ce7..000000000 --- a/examples/mixed/webpack.config.js +++ /dev/null @@ -1,6 +0,0 @@ -var webpack = require("../../"); -module.exports = { - plugins: [ - new webpack.dependencies.LabeledModulesPlugin() - ] -} \ No newline at end of file diff --git a/lib/dependencies/LabeledExportsDependency.js b/lib/dependencies/LabeledExportsDependency.js deleted file mode 100644 index 11053ce9f..000000000 --- a/lib/dependencies/LabeledExportsDependency.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ -var NullDependency = require("./NullDependency"); - -function LabeledExportsDependency(name, pos) { - NullDependency.call(this); - this.name = name; - this.pos = pos; -} -module.exports = LabeledExportsDependency; - -LabeledExportsDependency.prototype = Object.create(NullDependency.prototype); -LabeledExportsDependency.prototype.constructor = LabeledExportsDependency; - -LabeledExportsDependency.Template = function LabeledExportsDependencyTemplate() {}; - -LabeledExportsDependency.Template.prototype.apply = function(dep, source) { - source.insert(dep.pos, "exports[" + JSON.stringify(dep.name) + "] = "); -}; diff --git a/lib/dependencies/LabeledModuleDependency.js b/lib/dependencies/LabeledModuleDependency.js deleted file mode 100644 index 21d99edde..000000000 --- a/lib/dependencies/LabeledModuleDependency.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ -var ModuleDependency = require("./ModuleDependency"); -var Template = require("../Template"); - -function LabeledModuleDependency(request, range) { - ModuleDependency.call(this, request); - this.range = range; -} -module.exports = LabeledModuleDependency; - -LabeledModuleDependency.prototype = Object.create(ModuleDependency.prototype); -LabeledModuleDependency.prototype.constructor = LabeledModuleDependency; -LabeledModuleDependency.prototype.type = "labeled require"; - -LabeledModuleDependency.Template = function LabeledModuleDependencyTemplate() {}; - -LabeledModuleDependency.Template.prototype.apply = function(dep, source, outputOptions, requestShortener) { - var comment = "", - content; - if(outputOptions.pathinfo) comment = "/*! " + requestShortener.shorten(dep.request) + " */ "; - if(dep.module && dep.module.meta && dep.module.meta.exports) { - content = "var __WEBPACK_LABELED_MODULE__" + Template.toIdentifier(dep.module.id) + " = __webpack_require__(" + comment + JSON.stringify(dep.module.id) + ")"; - dep.module.meta.exports.forEach(function(e) { - content += ", " + e + " = __WEBPACK_LABELED_MODULE__" + Template.toIdentifier(dep.module.id) + "." + e; - }); - content += ";"; - } else if(dep.module) { - content = require("./WebpackMissingModule").moduleMetaInfo(dep.request); - } else { - content = require("./WebpackMissingModule").module(dep.request); - } - source.replace(dep.range[0], dep.range[1] - 1, content); -}; diff --git a/lib/dependencies/LabeledModuleDependencyParserPlugin.js b/lib/dependencies/LabeledModuleDependencyParserPlugin.js deleted file mode 100644 index 04dec278e..000000000 --- a/lib/dependencies/LabeledModuleDependencyParserPlugin.js +++ /dev/null @@ -1,78 +0,0 @@ -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ -var AbstractPlugin = require("../AbstractPlugin"); -var LabeledModuleDependency = require("./LabeledModuleDependency"); -var LabeledExportsDependency = require("./LabeledExportsDependency"); - -module.exports = AbstractPlugin.create({ - "label require": function(stmt) { - if(stmt.body.type !== "ExpressionStatement") return; - switch(stmt.body.expression.type) { - case "Literal": - var param = this.evaluateExpression(stmt.body.expression); - return this.applyPluginsBailResult("label require:item", stmt, param); - case "SequenceExpression": - stmt.body.expression.expressions.forEach(function(expression) { - var param = this.evaluateExpression(expression); - return this.applyPluginsBailResult("label require:item", stmt, param); - }, this); - return true; - } - }, - "label require:item": function(stmt, param) { - if(param.isString()) { - var dep = new LabeledModuleDependency(param.string, stmt.range); - dep.loc = stmt.loc; - dep.optional = !!this.scope.inTry; - this.state.current.addDependency(dep); - return true; - } - }, - "label exports": function(stmt) { - var name; - var dep; - switch(stmt.body.type) { - case "VariableDeclaration": - stmt.body.declarations.forEach(function(decl) { - if(!decl.init) return; - var dep = new LabeledExportsDependency(decl.id.name, decl.init.range[0]); - dep.loc = stmt.loc; - this.state.current.addDependency(dep); - if(!this.state.module.meta.exports) this.state.module.meta.exports = []; - this.state.module.meta.exports.push(decl.id.name); - }, this); - return true; - case "FunctionDeclaration": - name = stmt.body.id.name; - dep = new LabeledExportsDependency(name, stmt.body.range[0]); - dep.loc = stmt.loc; - this.state.current.addDependency(dep); - if(!this.state.module.meta.exports) this.state.module.meta.exports = []; - this.state.module.meta.exports.push(name); - return true; - case "ExpressionStatement": - if(stmt.body.expression.type === "Identifier") { - name = stmt.body.expression.name; - dep = new LabeledExportsDependency(name, stmt.body.expression.range[0]); - dep.loc = stmt.loc; - this.state.current.addDependency(dep); - if(!this.state.module.meta.exports) this.state.module.meta.exports = []; - this.state.module.meta.exports.push(name); - return true; - } else if(stmt.body.expression.type === "SequenceExpression") { - stmt.body.expression.expressions.forEach(function(e) { - if(e.type !== "Identifier") return; - name = e.name; - dep = new LabeledExportsDependency(name, e.range[0]); - dep.loc = stmt.loc; - this.state.current.addDependency(dep); - if(!this.state.module.meta.exports) this.state.module.meta.exports = []; - this.state.module.meta.exports.push(name); - }, this); - return true; - } - } - } -}); diff --git a/lib/dependencies/LabeledModulesPlugin.js b/lib/dependencies/LabeledModulesPlugin.js deleted file mode 100644 index db76de486..000000000 --- a/lib/dependencies/LabeledModulesPlugin.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ -var LabeledModuleDependency = require("./LabeledModuleDependency"); -var LabeledExportsDependency = require("./LabeledExportsDependency"); - -var NullFactory = require("../NullFactory"); - -var LabeledModuleDependencyParserPlugin = require("./LabeledModuleDependencyParserPlugin"); - -function LabeledModulesPlugin() {} -module.exports = LabeledModulesPlugin; - -LabeledModulesPlugin.prototype.apply = function(compiler) { - compiler.plugin("compilation", function(compilation, params) { - var normalModuleFactory = params.normalModuleFactory; - - compilation.dependencyFactories.set(LabeledModuleDependency, normalModuleFactory); - compilation.dependencyTemplates.set(LabeledModuleDependency, new LabeledModuleDependency.Template()); - - compilation.dependencyFactories.set(LabeledExportsDependency, new NullFactory()); - compilation.dependencyTemplates.set(LabeledExportsDependency, new LabeledExportsDependency.Template()); - }); - compiler.parser.apply(new LabeledModuleDependencyParserPlugin()); -}; diff --git a/lib/webpack.js b/lib/webpack.js index 42861c5dd..3505ecf9e 100644 --- a/lib/webpack.js +++ b/lib/webpack.js @@ -107,5 +107,4 @@ exportPlugins(exports.optimize = {}, "./optimize", [ "UglifyJsPlugin" ]); exportPlugins(exports.dependencies = {}, "./dependencies", [ - "LabeledModulesPlugin" ]); diff --git a/test/TestCases.test.js b/test/TestCases.test.js index 60cb408ac..35ca229fc 100644 --- a/test/TestCases.test.js +++ b/test/TestCases.test.js @@ -160,7 +160,6 @@ describe("TestCases", function() { }] }, plugins: (config.plugins || []).concat( - new webpack.dependencies.LabeledModulesPlugin(), function() { this.plugin("compilation", function(compilation) { ["optimize", "optimize-modules-basic", "optimize-chunks-basic", "after-optimize-tree", "after-optimize-assets"].forEach(function(hook) { diff --git a/test/browsertest/build.js b/test/browsertest/build.js index aa44266f0..598623d92 100644 --- a/test/browsertest/build.js +++ b/test/browsertest/build.js @@ -34,10 +34,10 @@ var library1 = cp.spawn("node", join(["../../bin/webpack.js", "--output-pathinfo bindOutput(library1); library1.on("exit", function(code) { if(code === 0) { - // node ../../bin/webpack --output-pathinfo --color --resolve-alias vm=vm-browserify --output-public-path js/ --output-chunk-filename [name].web.js --module-bind json --module-bind css=style!css --module-bind less=style!css!less --module-bind coffee --module-bind jade --prefetch ./lib/stylesheet.less --optimize-dedupe --labeled-modules ./lib/index "js/web.js?h=[hash]" + // node ../../bin/webpack --output-pathinfo --color --resolve-alias vm=vm-browserify --output-public-path js/ --output-chunk-filename [name].web.js --module-bind json --module-bind css=style!css --module-bind less=style!css!less --module-bind coffee --module-bind jade --prefetch ./lib/stylesheet.less ./lib/index "js/web.js?h=[hash]" var main = cp.spawn("node", join(["../../bin/webpack.js", "--output-pathinfo", "--color", "--resolve-alias", "vm=vm-browserify", "--output-public-path", "js/", "--output-chunk-filename", "[name].web.js", - "--module-bind", "json", "--module-bind", "css=style!css", "--module-bind", "less=style/url!file?postfix=.css&string!less", "--module-bind", "coffee", "--module-bind", "jade", "--prefetch", "./lib/stylesheet.less", "--optimize-dedupe", "--labeled-modules", "./lib/index", "js/web.js?h=[hash]", "--progress"], extraArgs)); + "--module-bind", "json", "--module-bind", "css=style!css", "--module-bind", "less=style/url!file?postfix=.css&string!less", "--module-bind", "coffee", "--module-bind", "jade", "--prefetch", "./lib/stylesheet.less", "./lib/index", "js/web.js?h=[hash]", "--progress"], extraArgs)); bindOutput(main); } }); diff --git a/test/cases/parsing/extract-labeled/index.js b/test/cases/parsing/extract-labeled/index.js deleted file mode 100644 index 109f4f852..000000000 --- a/test/cases/parsing/extract-labeled/index.js +++ /dev/null @@ -1,9 +0,0 @@ -it("should parse and evaluate labeled modules", function() { - var lbm = require("./labeledModuleA"); - lbm.should.have.property("x").be.eql("x"); - lbm.should.have.property("y").have.type("function"); - lbm.y().should.be.eql("y"); - lbm.should.have.property("z").be.eql("z"); - lbm.should.have.property("foo").have.type("function"); - lbm.foo().should.be.eql("foo"); -}); diff --git a/test/cases/parsing/extract-labeled/labeledModuleA.js b/test/cases/parsing/extract-labeled/labeledModuleA.js deleted file mode 100644 index 0e8a40303..000000000 --- a/test/cases/parsing/extract-labeled/labeledModuleA.js +++ /dev/null @@ -1,5 +0,0 @@ -require: "./labeledModuleB"; - -exports: x, y, z; - -exports: function foo(){ return "foo"; }; diff --git a/test/cases/parsing/extract-labeled/labeledModuleB.js b/test/cases/parsing/extract-labeled/labeledModuleB.js deleted file mode 100644 index 9331efdff..000000000 --- a/test/cases/parsing/extract-labeled/labeledModuleB.js +++ /dev/null @@ -1,4 +0,0 @@ -exports: var x = "x", y = function() { return "y"; }; - -var z = "z"; -exports: z; \ No newline at end of file