val-loader

安装

npm install val-loader --save-dev

Examples

If you have a module findAnswer.js like this:

function findAnswer() {
    return {
        code: 'module.exports = 42;'
    };
}

module.exports = findAnswer;

you can use the val-loader to generate source code on build time:

// webpack.config.js
module.exports = {
    ...
    module: {
        rules: [{
            test: require.resolve('path/to/findAnswer.js'),
            use: [{
                loader: 'val-loader'
            }]
        }]
    }
};

A complete example of all available features looks like this:

const ask = require('./ask.js');
const generateResult = require('./generateResult.js');

function findAnswer(options) {
    return ask(options.question)
        .then(generateResult)
        .then(result => ({

            code: result.code,
            sourceMap: result.sourceMap,
            ast: result.abstractSyntaxTree,

            // Mark dependencies of findAnswer().
            // The function will be re-executed if one of these
            // dependencies has changed in watch mode.
            dependencies: [
                // Array of absolute native paths!
                require.resolve('./ask.js'),
                require.resolve('./generateResult.js')
            ],

            // Flag the generated code as cacheable.
            // If none of the dependencies have changed,
            // the function won't be executed again.
            cacheable: true

        }));
}

module.exports = findAnswer;
// webpack.config.js
module.exports = {
    ...
    module: {
        rules: [{
            test: require.resolve('path/to/findAnswer.js'),
            use: [{
                loader: 'val-loader',
                options: {
                    question: 'What is the meaning of life?'
                }
            }]
        }]
    }
};

用法

此 loader 所加载的模块必须符合以下接口:

期望的模块接口

The loaded module must export a function as default export with the following function interface. 加载的模块必须使用以下函数接口,将 默认的 export 导出为一个函数。

module.exports = function (...) { ... };

Modules transpiled by Babel are also supported.

export default function (...) { ... }

Expected function interface

The function will be called with the loader options and must either return:

  • an object with the following object interface or
  • a promise that resolves to the following object interface

Expected object interface

Property Type Description
code `string Buffer` Required. The code that is passed to the next loader or to webpack.
sourceMap SourceMap Optional. Will be passed to the next loader or to webpack.
ast any Optional. An Abstract Syntax Tree that will be passed to the next loader. Useful to speed up the build time if the next loader uses the same AST.
dependencies Array<string> Default: []. An array of absolute, native paths to file dependencies that need to be watched for changes.
cacheable boolean Default: false. Flag whether the code can be re-used in watch mode if none of the dependencies have changed.

Loader Options

The val-loader itself has no options. The options are passed as they are (without cloning them) to the exported function.

维护人员


Juho Vepsäläinen

Joshua Wiens

Kees Kluskens

Johannes Ewald

原文:https://webpack.js.org/loaders/val-loader/

results matching ""

    No results matching ""