Javascript 如何创建一个既适用于谷歌应用程序脚本又适用于浏览器的代码库?

Javascript 如何创建一个既适用于谷歌应用程序脚本又适用于浏览器的代码库?,javascript,google-apps-script,browserify,Javascript,Google Apps Script,Browserify,这是一个我无法思考的问题,如何让它以最佳方式工作,即当对代码库进行更新时,谷歌应用程序脚本文档加载项和浏览器版本都会更新。 假设我有一个谷歌应用程序脚本项目,我想发布它,它既可以作为附加组件用于文档,也可以用于浏览器。但是,与浏览器版本相比,GAS版本的此项目具有不同的实现。 不幸的是,Browserify不再是一个选项,因为它似乎破坏了与天然气中Browserify的向后兼容性。有没有关于如何解决这个问题的建议?一种方法是给我们一个像Gulp Expose这样的工具 对于您的浏览器构建,您将

这是一个我无法思考的问题,如何让它以最佳方式工作,即当对代码库进行更新时,谷歌应用程序脚本文档加载项和浏览器版本都会更新。 假设我有一个谷歌应用程序脚本项目,我想发布它,它既可以作为附加组件用于文档,也可以用于浏览器。但是,与浏览器版本相比,GAS版本的此项目具有不同的实现。
不幸的是,Browserify不再是一个选项,因为它似乎破坏了与天然气中Browserify的向后兼容性。有没有关于如何解决这个问题的建议?

一种方法是给我们一个像Gulp Expose这样的工具

对于您的浏览器构建,您将公开到
窗口
。对于您的应用程序脚本构建,您将暴露于
。下面是一个示例,它是一个用应用程序脚本代码构建模块的吞咽任务。这是从位于的官方应用程序脚本Oauth2库中找到的


你所说的浏览器版本是指应用程序脚本web应用程序吗?我的意思是完全不依赖goggle应用程序脚本,甚至不依赖onOpen(),因为应用程序脚本web应用程序(至少我是这么认为的)是可以在任何浏览器上运行的纯javascript项目。谢谢你的建议。我只是想澄清一下。假设我们有一个基本的docs附加脚本,比如这里的脚本。我将如何更改此脚本以开发一个既能在浏览器上工作又能在文档加载项中工作的版本?显然,实现侧边栏和实际google文档之间交互的逻辑需要抽象,但是gulp expose是否有助于此场景?只是为了添加仅在google基础设施上运行的澄清应用程序脚本。它是一种服务器端语言。您可以创建HTML界面,但所有应用程序脚本服务都在服务器端运行。因此,有鉴于此,您可以编写一个作为附加组件和独立网页运行的代码库的唯一方法是使用执行API。
var gulp = require('gulp');
var concat = require('gulp-concat');
var expose = require('gulp-expose');
var stripLine  = require('gulp-strip-line');
var gulpif = require('gulp-if');
var del = require('del');
var rename = require("gulp-rename");
var jshint = require('gulp-jshint');
var stylish = require('jshint-stylish');

gulp.task('dist', ['clean'], function() {
  gulp.src('src/*.gs')
      .pipe(gulpif(/OAuth2\.gs$/,
          stripLine('var _ =')))
      .pipe(concat('OAuth2.gs'))
      .pipe(expose('this', 'OAuth2'))
      .pipe(gulp.dest('dist'));
  gulp.src('node_modules/underscore/underscore.js')
      .pipe(rename('Underscore.gs'))
      .pipe(gulp.dest('dist'));
});

gulp.task('clean', function() {
  del([
    'dist/*'
  ]);
});

gulp.task('lint', function() {
  return gulp.src('src/*.gs')
    .pipe(jshint())
    .pipe(jshint.reporter(stylish));
});