如何为 sails.js 中的自动 <script> 标签链接添加例外?

How add exceptions to automatic <script> tag linking in sails.js?

我正在使用 Sails.js 构建应用程序并使用 Paper.js 库。 Paper 在它自己的 paperscript 范围内运行,该范围由 script 标签中的 type 属性定义。标签应为

<script type="text/paperscript" src="/js/public/prototype.js"></script>

为了正常工作。默认情况下,Sails 会自动将脚本与 grunt-sails 链接器任务链接起来,我无法找到任何有关如何为一个文件创建例外或为其定义特定类型属性的信息。有这样的方法吗?

开箱即用。但!您始终可以自定义构建管道。

将您的 prototype.js 放入名为 assets/paperscript

的新文件夹中

tasks/pipeline.js中添加:

var paperFilesToInject = [
  'paperscript/**/*.js'
];

module.exports.paperFilesToInject = paperFilesToInject.map(function(path) {
  return '.tmp/public/' + path;
});

tasks/config/sails-linker.js中,在grunt.config.set('sails-linker', {里面添加如下内容:

    devPaperscript: {
        options: {
            startTag: '<!--PAPERSCRIPTS-->',
            endTag: '<!--PAPERSCRIPTS END-->',
            fileTmpl: '<script type="text/paperscript" src="%s"></script>',
            appRoot: '.tmp/public'
        },
        files: {
            '.tmp/public/**/*.html': require('../pipeline').paperFilesToInject,
            'views/**/*.html': require('../pipeline').paperFilesToInject,
            'views/**/*.ejs': require('../pipeline').paperFilesToInject
        }
    },

    devPaperscriptRelative: {
        options: {
            startTag: '<!--PAPERSCRIPTS-->',
            endTag: '<!--PAPERSCRIPTS END-->',
            fileTmpl: '<script type="text/paperscript" src="%s"></script>',
            appRoot: '.tmp/public',
            relative: true
        },
        files: {
            '.tmp/public/**/*.html': require('../pipeline').paperFilesToInject,
            'views/**/*.html': require('../pipeline').paperFilesToInject,
            'views/**/*.ejs': require('../pipeline').paperFilesToInject
        }
    },

    prodPaperscript: {
        options: {
            startTag: '<!--PAPERSCRIPTS-->',
            endTag: '<!--PAPERSCRIPTS END-->',
            fileTmpl: '<script type="text/paperscript" src="%s"></script>',
            appRoot: '.tmp/public'
        },
        files: {
            '.tmp/public/**/*.html': require('../pipeline').paperFilesToInject,
            'views/**/*.html': require('../pipeline').paperFilesToInject,
            'views/**/*.ejs': require('../pipeline').paperFilesToInject
        }
    },

    prodPaperscriptRelative: {
        options: {
            startTag: '<!--PAPERSCRIPTS-->',
            endTag: '<!--PAPERSCRIPTS END-->',
            fileTmpl: '<script type="text/paperscript" src="%s"></script>',
            appRoot: '.tmp/public',
            relative: true
        },
        files: {
            '.tmp/public/**/*.html': require('../pipeline').paperFilesToInject,
            'views/**/*.html': require('../pipeline').paperFilesToInject,
            'views/**/*.ejs': require('../pipeline').paperFilesToInject
        }
    },

tasks/register/linkAssets.js中添加:

'sails-linker:devPaperscript',

tasks/register/linkAssetsBuild.js中添加:

'sails-linker:devPaperscriptRelative',

tasks/register/prod.js中添加:

'sails-linker:prodPaperscript',

tasks/register/linkAssetsProd.js中添加:

'sails-linker:prodPaperscriptRelative',

在您看来,在应该注入 paperscript 的地方添加以下内容:

<!--PAPERSCRIPTS-->
<!--PAPERSCRIPTS END-->

请注意,与常规 js 文件不同,它不会获得 concat/minified 用于生产。