简体   繁体   中英

set directory for node_modules within gruntfile.js

I would like to set the path of the node_modules directory within the gruntfile.js. I would like to have one central node_module directory for all my grunt projects.

Is it possible to set the path for an external node_module directory?

Current setup (which works)

projekt1
--gruntfile.js
--package.json
--node_modules

projekt2
--gruntfile.js
--package.json
--node_modules

Set up which I would like to have

node_modules

project1
--gruntfile.js
--package.json

project2
--gruntfile.js
--package.json

You can.... I have been using this setup without any issues. In each of your project Gruntfile.js files, simply set the base to one directory up like so:

Given a folder structure like this:

node_modules
    project1
        app.js
        Gruntfile.js
        package.json

Your Gruntfile.js may look something like this

module.exports = function(grunt) {

    // Tell grunt where to find node_modules
    // This is the line you're looking for
    grunt.file.setBase('../');

    // Your normal grunt config
    grunt.initConfig({

        // Your package.json file is now relative to the parent folder 
        pkg: grunt.file.readJSON('project1/package.json'),

        // I use webpack, your tasks will probably be different
        webpack: {
            options: {},
            build: {

                // Paths are now resolved from the upper folder
                // since we set the base path to one level up
                entry: './project1/app.js',
                output: {

                    // Again, the path must be relative to the parent folder
                    path: 'project1',
                    filename: 'app.min.js'
                }
            }
        }

        // etc...
    });

    // Load tasks...

}

Once you setBase('../') you'll need to make sure that all your file paths are resolved correctly since your base path has been changed to 1 level up.

A warning... if you publish or distribute your package, Grunt tasks won't work for those who download it because they more than likely won't have the same setup with node_modules 1 level up. And even if they do, they may not name the project1 folder the same

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM