Javascript 使用browserify时,在生产中需要缩小版本,但在开发中需要调试的推荐方法是什么?

Javascript 使用browserify时,在生产中需要缩小版本,但在开发中需要调试的推荐方法是什么?,javascript,browserify,Javascript,Browserify,我刚刚开始研究browserify,我想知道在为生产构建依赖项时需要最小版本的依赖项,在为开发构建依赖项时需要调试版本的推荐方法是什么 例如,我在这里学习了教程,并最终获得了以下文件: js\main.js var names = require('./names.js'), findSuperman = require('./findsuperman.js'); if (findSuperman(names())) { document.write('We found Sup

我刚刚开始研究browserify,我想知道在为生产构建依赖项时需要最小版本的依赖项,在为开发构建依赖项时需要调试版本的推荐方法是什么

例如,我在这里学习了教程,并最终获得了以下文件:

js\main.js

var names = require('./names.js'),
    findSuperman = require('./findsuperman.js');

if (findSuperman(names())) {
    document.write('We found Superman');
} else {
    document.write('No Superman...');
}
module.exports = function () {
    return ['Barry Allen', 'Hal Jordan', 'Kara Kent', 'Diana Prince', 'Ray Palmer', 'Oliver Queen', 'Bruce Wayne', 'Wally West', 'John Jones', 'Kyle Rayner', 'Arthur Curry', 'Clark Kent'];
}
var _ = require('underscore');

module.exports = function (values) {
    var foundSuperman = false;

    _.find(values, function (name) {
        if (name === 'Clark Kent') {
            console.log('It\'s Superman!');
            foundSuperman = true;
        } else {
            console.log('... No superman!');
        }
    });

    return foundSuperman;
}
module.exports = function (grunt) {
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-browserify');

    grunt.registerTask('default', ['browserify', 'watch']);

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        browserify: {
            main: {
                options: {
                    browserifyOptions: {
                        debug: true
                    }
                },
                src: 'js/main.js',
                dest: 'js/findem.js'
            }
        },
        watch: {
            files: 'js/*',
            tasks: ['default']
        }
    });
}
js\names.js

var names = require('./names.js'),
    findSuperman = require('./findsuperman.js');

if (findSuperman(names())) {
    document.write('We found Superman');
} else {
    document.write('No Superman...');
}
module.exports = function () {
    return ['Barry Allen', 'Hal Jordan', 'Kara Kent', 'Diana Prince', 'Ray Palmer', 'Oliver Queen', 'Bruce Wayne', 'Wally West', 'John Jones', 'Kyle Rayner', 'Arthur Curry', 'Clark Kent'];
}
var _ = require('underscore');

module.exports = function (values) {
    var foundSuperman = false;

    _.find(values, function (name) {
        if (name === 'Clark Kent') {
            console.log('It\'s Superman!');
            foundSuperman = true;
        } else {
            console.log('... No superman!');
        }
    });

    return foundSuperman;
}
module.exports = function (grunt) {
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-browserify');

    grunt.registerTask('default', ['browserify', 'watch']);

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        browserify: {
            main: {
                options: {
                    browserifyOptions: {
                        debug: true
                    }
                },
                src: 'js/main.js',
                dest: 'js/findem.js'
            }
        },
        watch: {
            files: 'js/*',
            tasks: ['default']
        }
    });
}
js\findsuperman.js

var names = require('./names.js'),
    findSuperman = require('./findsuperman.js');

if (findSuperman(names())) {
    document.write('We found Superman');
} else {
    document.write('No Superman...');
}
module.exports = function () {
    return ['Barry Allen', 'Hal Jordan', 'Kara Kent', 'Diana Prince', 'Ray Palmer', 'Oliver Queen', 'Bruce Wayne', 'Wally West', 'John Jones', 'Kyle Rayner', 'Arthur Curry', 'Clark Kent'];
}
var _ = require('underscore');

module.exports = function (values) {
    var foundSuperman = false;

    _.find(values, function (name) {
        if (name === 'Clark Kent') {
            console.log('It\'s Superman!');
            foundSuperman = true;
        } else {
            console.log('... No superman!');
        }
    });

    return foundSuperman;
}
module.exports = function (grunt) {
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-browserify');

    grunt.registerTask('default', ['browserify', 'watch']);

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        browserify: {
            main: {
                options: {
                    browserifyOptions: {
                        debug: true
                    }
                },
                src: 'js/main.js',
                dest: 'js/findem.js'
            }
        },
        watch: {
            files: 'js/*',
            tasks: ['default']
        }
    });
}
index.html

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>Find Superman</title>
</head>
<body>
    <script src="js/findem.js"></script>
</body>
</html>
grunfile.js

var names = require('./names.js'),
    findSuperman = require('./findsuperman.js');

if (findSuperman(names())) {
    document.write('We found Superman');
} else {
    document.write('No Superman...');
}
module.exports = function () {
    return ['Barry Allen', 'Hal Jordan', 'Kara Kent', 'Diana Prince', 'Ray Palmer', 'Oliver Queen', 'Bruce Wayne', 'Wally West', 'John Jones', 'Kyle Rayner', 'Arthur Curry', 'Clark Kent'];
}
var _ = require('underscore');

module.exports = function (values) {
    var foundSuperman = false;

    _.find(values, function (name) {
        if (name === 'Clark Kent') {
            console.log('It\'s Superman!');
            foundSuperman = true;
        } else {
            console.log('... No superman!');
        }
    });

    return foundSuperman;
}
module.exports = function (grunt) {
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-browserify');

    grunt.registerTask('default', ['browserify', 'watch']);

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        browserify: {
            main: {
                options: {
                    browserifyOptions: {
                        debug: true
                    }
                },
                src: 'js/main.js',
                dest: 'js/findem.js'
            }
        },
        watch: {
            files: 'js/*',
            tasks: ['default']
        }
    });
}
运行
npm run grunt
将创建js/findem.js,其中包括下划线包的调试版本(并启动监视程序)

但是我也希望有js/findem-min.js——用于生产的最小版本,它应该包括下划线包的最小版本

这里有几件事我需要了解。事实上:

  • require('下划线')
    映射到调试版本。似乎没有
    require('下划线-min')
    。似乎必须求助于
    require('下划线/下划线-min.js')
    。我说得对吗
  • 如何根据生产或开发构建有条件地要求不同的内容,但仅限于浏览时?当然,最终的js文件(js\findem.js或js\findem-min.js)应该无条件地要求正确的东西
  • 我还应该有index-min.html吗?似乎不对。那么,我应该有一个index.html来加载js\findem.js或js\findem-min.js?因为我不能同时拥有两者,所以我需要将index.html作为动态内容而不是静态文件提供。类似于jade模板,js文件名为js\findem.js或js\findem-min.js,具体取决于启动参数(NODE_ENV=development)。我说得对吗

  • 我想知道我是否正确理解第1项和第3项,但我没有第2项的答案。推荐的方法是什么(如果您愿意,最好的做法是什么)?我可能也弄错了第1项和第3项,所以如果我弄错了,请纠正我。

    我已经多年没有使用browserify了。现在大多数人都使用网页包。也就是说,从grunt传递到Browserify的参数将控制输出。“run”命令通常映射到debug。将有一个单独的命令来构建生产文件

    对于#1,您将只希望编写require(“下划线”)。由模块绑定器(browserify/webpack/etc)重写/处理。如果要引用特定文件,请在文件中包含.js。如果从项目外部引用模块(如下划线),请不要包含它

    对于#2,Browserify的文档非常糟糕。由于Webpack在这里的工作方式基本相同,阅读他们的resolve文档可能会帮助您了解这一点

    对于#3,这是正确的。HTML需要引用不同的.js文件,具体取决于您是否处于prod/debug中。如果需要静态输出,可以使用两个文件对其进行硬编码。但在大多数情况下,是的,您通常会选择一个env变量。其他情况可能是为旧浏览器提供遗留的.js文件,等等


    祝你好运(并切换到webpack:)

    我也甩了browserify。有一次,我看到没有人对此做出反应。