代码之家  ›  专栏  ›  技术社区  ›  bertday

强制Browserify转换依赖项?

  •  9
  • bertday  · 技术社区  · 8 年前

    我正在同时处理两个节点包,我们将它们称为库和消费者。库负责在浏览器中呈现一堆东西。消费者所做的就是 import Library from 'library' 打电话 Library(someConfigHere) --这基本上只是一个测试,以确保库在浏览器中执行我期望的功能。

    我已经 npm link ed Library进入消费者,并尝试在消费者上运行Browserify,但我得到以下错误: ParseError: 'import' and 'export' may appear only with 'sourceType: module' export 声明,所以我猜Browserify只针对消费者而不是库。

    所以我的问题是: 是否有任何方法可以强制Browserify转换依赖项 ?

    这是我的 package.json :

    {
      "name": "consumer",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "start": "budo index.js --port $PORT",
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "babel-preset-es2015": "^6.13.2",
        "babel-preset-react": "^6.11.1",
        "babelify": "^7.3.0",
        "browserify-shim": "^3.8.12"
      },
      "browserify": {
        "transform": [
          "babelify"
        ]
      },
      "babel": {
        "presets": [
          "es2015",
          "react"
        ]
      }
    }
    

    这是消费者的 index.js :

    import Library from 'library'  // <= this is what isn't getting babelified
    
    console.log(Library);
    

    这是图书馆的 index.js :

    export default (config) => {
        console.log('Testing testing')
    }
    
    1 回复  |  直到 8 年前
        1
  •  7
  •   cartant    8 年前

    Browserify转换可以配置为全局,这意味着它们将应用于 node_modules

    配置为每个转换。使用babelify,您可以这样配置它:

    browserify().transform("babelify", {
      global: true
    })
    

    或者,如果您正在使用命令行,如下所示:

    browserify ... -t [ babelify --global ] ...
    

    或者,在 package.json ,应该是这样的(注意添加的方括号):

    "browserify": {
      "transform": [
        ["babelify", { "global": true }]
      ]
    }
    

    Babelify还实现了 ignore node_modules 你想要的。还有更多信息 here .

    另一个解决方案是包括类似的 browserify / babelify 您的配置 library 模块的 package.json pacakge.json 用于转换的文件,并将应用配置的任何文件。