串联并缩小后如何使用require js文件

时间:2018-06-20 17:54:18

标签: javascript requirejs r.js almond grunt-requirejs

我在我的项目中使用requirejs,每个模块都有一个js文件,该文件使用require调用来利用库/组件。以下是示例代码:-

require(["modernizr",
"jquery",
"bootstrap",
"handlebars",
"bootstrap-table",
], function(modernizr, $, bootstrap, Handlebars, bootstrapTable) {

$(document).on('click', '#searchBtn', function(e){
    search();
});

$('#table').bootstrapTable({
    classes: 'table table-no-bordered',
    striped: true,
    iconsPrefix: 'fa',
    responsive: true,
    responsiveBreakPoint: 768,
    responsiveClass: "bootstrap-table-cardview",
    undefinedText: "",
    showFooter: true,
    columns: columns(),
    data: data(),
});
}

我想在页面加载时尽量减少浏览器中的js调用次数。

(我知道r.js,但想避免使用它,因为它需要更改项目文件夹的结构)

因此,我正在考虑使用grunt连接并缩小所有库/组件js文件(如jquery,bootstrap等),然后在模块特定文件中要求它们。

如果这样做,我想知道如何使用require包含相同的内容,并能够像现在一样使用jquery($)和bootstrapTable?

我尝试了以下操作,但似乎不起作用:-

require(["mainjs"], function(mainjs) {

mainjs(document).on('click', '#searchBtn', function(e){
    search();
});

mainjs('#table').mainjs({
    classes: 'table table-no-bordered',
    striped: true,
    iconsPrefix: 'fa',
    responsive: true,
    responsiveBreakPoint: 768,
    responsiveClass: "bootstrap-table-cardview",
    undefinedText: "",
    showFooter: true,
    columns: columns(),
    data: data(),
});
}

以下是我的项目结构:-

my-proj
build
src
    app
        components
            selectpicker
                selectpicker.hbs
                selectpicker.js
                selectpicker.less
            calendar
                calendar.hbs
                calendar.js
                calendar.less
            ...
            ...
            ...
        page
            homepage
                homepage.html
                homepage.js
            transacations
                transactions.html
                transactions.js
            ...
            ...
            ...
    assets
        images
        js
            jquery.js
            modernizr.js
            handlebar.js
            require.js
            bootstrap.js
            moment.js
            ...
            ...
            ...
        less
Gruntfile.js
package.json

2 个答案:

答案 0 :(得分:1)

您可以使用webpack

创建文件webpack.config.js

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js'
  }
};

和您的代码文件src / index.js:

const modernizr = require("modernizr");
const $ = require("jquery");
const bootstrap = require("bootstrap");
const Handlebars= require("handlebars");
const bootstrapTable = require("bootstrap-table");

$(document).on('click', '#searchBtn', function(e){
    search();
});

$('#table').bootstrapTable({
    classes: 'table table-no-bordered',
    striped: true,
    iconsPrefix: 'fa',
    responsive: true,
    responsiveBreakPoint: 768,
    responsiveClass: "bootstrap-table-cardview",
    undefinedText: "",
    showFooter: true,
    columns: columns(),
    data: data(),
});

然后在您的项目目录中运行命令行程序webpack。这将创建一个名为dist/bundle.js的文件,其中包括您的项目代码以及一个文件中所有使用的库。

您还可以使用以下配置告诉webpack缩小整个代码。这还将最小化目标文件中所有已使用的依赖项。

const webpack = require("webpack");
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');

module.exports = {
  // ...
  optimization: {
    minimize: true,
    minimizer: new UglifyJsPlugin({
      include: /\.min\.js$/
    })
  }
};

答案 1 :(得分:0)

您可以使用webpack,parceljs或Browserify将模块捆绑到一个.js文件中。