Git Product home page Git Product logo

core's Introduction

core's People

Contributors

also avatar diurnalist avatar gaearon avatar gnarf avatar gunta avatar jackmoore avatar jgoz avatar sokra avatar spacek33z avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

core's Issues

It is impossible to check context in loader's include function

When I use include: function(path){} parameter for loader, it is impossible to check context (file which requires this path).
Example:

    loaders: [
      {
        test: /.svg/,
        include: function(path) {
          //I want to check context here, but it is impossible
          console.log('path', path)
        },
        loader: 'svgo'
      }
   ]

Typescript 1.6 es6 with Decorator, Babel, SourceMap, throwing Exception

I'm using [email protected] configured to output ES6 and sourcemaps, outside of webpack.
Then using [email protected] with [email protected] preloader, and [email protected] loader.
If original TS source contains a Decorator, the following exception is thrown

c:\src\webpack\node_modules\webpack-core\lib\NormalModuleMixin.js:163
if(isError) throw e;
^

Error: No element indexed by 1
at ArraySet_at as at
at SourceMapConsumer. (c:\src\webpack\node_modules\webpack-core\node_modules\source-map\lib\source-map\source-map-consumer.js:147:69)
at Array.map (native)
at SourceMapConsumer_eachMapping as eachMapping
at Function.SourceNode_fromStringWithSourceMap as fromStringWithSourceMap
at SourceMapSource.node (c:\src\webpack\node_modules\webpack-core\lib\SourceMapSource.js:41:20)
at ReplaceSource.node (c:\src\webpack\node_modules\webpack-core\lib\ReplaceSource.js:55:29)
at CachedSource.node (c:\src\webpack\node_modules\webpack-core\lib\CachedSource.js:41:22)
at PrefixSource.node (c:\src\webpack\node_modules\webpack-core\lib\PrefixSource.js:27:26)
at c:\src\webpack\node_modules\webpack-core\lib\ConcatSource.js:38:49

If the babel-loader is disabled (simply by changing test pattern to non matching regex), no exceptions are thrown and output is as expected.

If the Decorator call is disabled (simply by removing the '@' before the call), no exceptions are thrown and output is as expected.

To Reproduce:

tsconfig.json

{
    "compilerOptions": {
        "target": "es6",
        "module": "commonjs",
        "sourceMap": true,
        "experimentalDecorators": true
    },
    "exclude": [
        "node_modules"
    ]
}

webpack.config.js

module.exports = {
    entry: [
        './decoratorChoking.js'
    ],
    devtool: 'source-map',
    output: {
        path: path.join(__dirname, '/'),
        filename: 'app.js'
    },
    module: {
        preLoaders: [{
            test: /\.js$/,
            loader: 'source-map-loader'
        }],
        loaders: [{
            test: /\.js$/,
            loader: 'babel',
            exclude: /node_modules/
        }]
    }
}

decoratorChoking.ts

function ChokingDecorator() {
    function(target: Function) {
    }
}

@ChokingDecorator
class Plain {}

It appears either source-map-loader, babel-loader, or webpack-core is generating a SourceMapSource object where its sourceMap.sources property contains 1 element set to "decoratorChoking.ts", but the sourceMap.sourcesContent contains 2 elements. The 1st element is the TypeScript transpiled Javascript; i.e. the contents of decoratorChoking.js, and the 2nd the original TypeScript source; i.e. the contents of decoratorChoking.ts. This is the cause of the above exception, although not the root cause of course.

Simply removing the @ symbol in front of @ChokingDecorator within decoratorChoking.ts results in a SourceMapSource object having only one element in sourceMap.sourcesContent, it being the contents of the original TypeScript file decoratorChoking.ts. This does not cause an exception to be thrown.

Kindest regards in helping locate and resolve this bug please.

Error: Element from loaders list should have one of the fields 'loader' or 'loaders'

Got the error message below, when doing babel-node tools/distServer.js (open-src)

Error: Element from loaders list should have one of the fields 'loader' or 'loaders'
at getLoadersFromObject (C:\Repo\vcm-spa\app\node_modules\webpack-core\lib\LoadersList.js:60:8)
at LoadersList. (C:\Repo\vcm-spa\app\node_modules\webpack-core\lib\LoadersList.js:78:12)
at Array.map (native)
at LoadersList.match (C:\Repo\vcm-spa\app\node_modules\webpack-core\lib\LoadersList.js:70:19)
at C:\Repo\vcm-spa\app\node_modules\webpack\lib\NormalModuleFactory.js:111:68
at C:\Repo\vcm-spa\app\node_modules\async\lib\async.js:726:13
at C:\Repo\vcm-spa\app\node_modules\async\lib\async.js:52:16
at done (C:\Repo\vcm-spa\app\node_modules\async\lib\async.js:246:17)
at C:\Repo\vcm-spa\app\node_modules\async\lib\async.js:44:16
at C:\Repo\vcm-spa\app\node_modules\async\lib\async.js:723:17
ERROR: "open-src" exited with 1.

Source file of srcServer.js

// This file configures the development web server
// which supports hot reloading and synchronized testing.

// Require Browsersync along with webpack and middleware for it
import browserSync from 'browser-sync';
// Required for react-router browserHistory
// see https://github.com/BrowserSync/browser-sync/issues/204#issuecomment-102623643
import historyApiFallback from 'connect-history-api-fallback';
import webpack from 'webpack';
import webpackDevMiddleware from 'webpack-dev-middleware';
import webpackHotMiddleware from 'webpack-hot-middleware';
import config from '../webpack.config.dev';

const bundler = webpack(config);

// Run Browsersync and use middleware for Hot Module Replacement
browserSync({
  server: {
    baseDir: 'src',
    middleware: [
      webpackDevMiddleware(bundler, {
        // Dev middleware can't access config, so we provide publicPath
        publicPath: config.output.publicPath,

        // pretty colored output
        stats: { colors: true },

        // Set to false to display a list of each file that is being bundled.
        noInfo: true,
        quiet:true
        // for other settings see
        // http://webpack.github.io/docs/webpack-dev-middleware.html
      }),
      // bundler should be the same as above
      webpackHotMiddleware(bundler),
      historyApiFallback()
    ]
  },

  // no need to watch '*.js' here, webpack will take care of it for us,
  // including full page reloads if HMR won't work
  files: [
    'src/*.html'
  ]
});

Add support for aliases regex matching

Hi again!
I hope to not be too spammy, but I'll try to report all the issues I find along the way ;)

Right now I'm using an alias to resolve a package name,
but the test regex doesn't tries to match the defined aliases.

Current way of doing it:

 resolve: {
      alias: {
        angular: 'angular/angular'
      }
    },
    module: {
      loaders: [{ test: /angular\/angular/, loader: 'exports?angular'}]
    }

Easier and less verbose way supporting alias names:

    module: {
      loaders: [{ test: /^angular$/, loader: 'exports?angular'}]
    }

Or even better, defaulting a test: String parameter to alias matching:

    module: {
      loaders: [{ test: 'angular', loader: 'exports?angular'}]
    }

What do you think?

A plugin breaks builds in webpack core in webpack 1.13.1

Cross-posted from mrsum/webpack-svgstore-plugin#95 as I don't know whose problem it is.

tl;dr Having plugin enabled breaks webpack builds somwhere in webpack-core/lib/ConcatSource.js

> npm install --save-dev webpack

This installs webpack 1.13.1

Given the following webpack.config:

var SvgStore = require('webpack-svgstore-plugin');

var config = {
    entry:   {
        app: [
            '/soma-file.js'
        ],
        lib: [
            'lodash'
        ]
    },
    output:  {
        path:              '/path',
        filename:          filename
    },
    module:  {
        loaders: [
            {
                test:   /\.js$/,
                loader: 'babel',
                query:  {
                    presets: ['es2015', 'stage-0', 'react'],
                    compact: false
                }
            },
            {
                test:   /\.json$/,
                loader: 'json'
            }
        ]
    },
    plugins: [
        new SvgStore(path.join('./img/svg', '', '**!/!*.svg'), path.join('./', ''), {
            name:        '[hash].sprite.svg',
            chunk:       'app',
            prefix:      'pref-',
            baseUrl:     '/my-url',
            svgoOptions: {}
        }),
        new webpack.optimize.CommonsChunkPlugin("lib", "lib.js", Infinity)
    ],
    bail:    false,
    target:  'web'
};

Trying to run this results in:

/node_modules/webpack-core/lib/ConcatSource.js:24
        return typeof item === "string" ? item : item.source();
                                                     ^

TypeError: Cannot read property 'source' of undefined
    at /node_modules/webpack-core/lib/ConcatSource.js:24:48
    at Array.map (native)
    at ConcatSource.source (/node_modules/webpack-core/lib/ConcatSource.js:23:23)
    at Compiler.writeOut (/node_modules/webpack/lib/Compiler.js:256:26)
    at Compiler.<anonymous> (/node_modules/webpack/lib/Compiler.js:246:20)
    at /node_modules/async/lib/async.js:181:20
    at Object.async.forEachOf.async.eachOf (/node_modules/async/lib/async.js:233:13)
    at Object.async.forEach.async.each (/node_modules/async/lib/async.js:209:22)
    at Compiler.emitFiles (/node_modules/webpack/lib/Compiler.js:235:20)
    at /node_modules/mkdirp/index.js:48:26
    at FSReqWrap.oncomplete (fs.js:82:15)

Structured objects in the loader list

Currently to specify a loader you can write:

loaders: [
  { test: /\.js$/, loader: 'babel', query: {stage: 0, optional: ['runtime']} }
]

but this does not support multiple loaders. For that, only the string syntax is supported: react-hot!babel?stage=0&optional[]=runtime. I would like to be able to use the object literal syntax to specify multiple loaders with query parameters:

loaders: [
  {
    test: /\.js$/,
    loaders: [
      { loader: 'react-hot' },  // or just 'react-hot', using the string syntax as shorthand
      { loader: 'babel',  query: {stage: 0, optional: ['runtime'] }
    ]
  }
]

ModuleBuildError: Module build failed: TypeError: Cannot read property 'columns' of undefined

I'm just creating this for other people to not slip up when they upgrade. This issue actually prevented me from upgrading for a while until I finally had a second to look at what was going on and it turned out to be quite simple. If you're getting this error, it is quite possibly because you have a loader that is using an OriginalSource object and calling node() without any options.

Previously, options was not used by the node function so this worked fine, but now it is being used.

So, I had a custom loader that did this:

// ... code

var origMap = this.sourceMap ? new OriginalSource(source, identifier, map) : null;

var globalPrefix = '@import "~global";\n'; // <-- note, do not do this... I'm paying for it now... #knowyourdependencies
source = globalPrefix + source;
if (origMap) {
  origMap.node().prepend(globalPrefix);
}

// ... code

I needed to change it to this:

// ... code

var origMap = this.sourceMap ? new OriginalSource(source, identifier, map) : null;

var globalPrefix = '@import "~global";\n'; // <-- note, do not do this... I'm paying for it now... #knowyourdependencies
source = globalPrefix + source;
if (origMap) {
  origMap.node({}).prepend(globalPrefix); // <-- note the empty object being passed to the `node` function
}

// ... code

Perhaps webpack-core should default the options to be an empty object, but either way, this fixes the issue.

Loaders query is not working as expected

Hi!

This may be a documentation problem, but I'm having problems with the following code in the webpack configuration:

This works:

loaders: [{ test: /^angular$/, loader: 'exports?angular'}],

But this doesn't work:

loaders: [{ test: /^angular$/, loader: 'exports', query: {angular: true}}],

Neither this does:

loaders: [{ test: /^angular$/, loader: 'exports', query: 'angular'}],

Thank you!

Loader query function, regex, and object, support

Currently, the loader query only supports strings, and when you pass it an actual object, it applies stringify to it, and prevents the ability to pass a function, which may be desirable if you wish to pass a custom minification function, or a regex to your loader.

Query to json string in /lib/LoadersList.js#L52-L61

function getLoadersFromObject(element) {
    if(element.query) {
        if(!element.loader || element.loader.indexOf("!") >= 0) throw new Error("Cannot define 'query' and multiple loaders in loaders list");
        if(typeof element.query === "string") return [element.loader + "?" + element.query];
        return [element.loader + "?" + JSON.stringify(element.query)];
    }
    if(element.loader) return element.loader.split("!");
    if(element.loaders) return element.loaders;
    throw new Error("Element from loaders list should have one of the fields 'loader' or 'loaders'");
}

jade-locals interpretting query: webpack/jade-loader/index.js#L9-L20

module.exports = function(source) {
    this.cacheable && this.cacheable();
    var jade = require("jade");

    var utils = require("jade/lib/utils");
    var nodes = require("jade/lib/nodes");
    var filters = require("jade/lib/filters");

    var req = loaderUtils.getRemainingRequest(this).replace(/^!/, "");

    var query = loaderUtils.parseQuery(this.query);

It is especially relevant for my current project where we need to pass in a localization function (convert keys to text) into the jade-loader locals object.

I feel this can be addressed by allowing element.query to be either an object or a string.

Maybe there is a way to work around this by allowing the list of loaders to be objects of the modules themselves, as described in webpack/How to register a custom loader in webpack.config #903 or where is apply-loader to use with jade-loader #940

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.