2016-12-12 66 views
6

我正在处理两个Node包,我们称之为Library和Consumer。库负责在浏览器中渲染一堆东西。所有消费者都是import Library from 'library',并致电Library(someConfigHere) - 这基本上只是一个测试,以确保库正在做我所期望的浏览器。强制Browserify转换依赖关系?

我已将npm link ed库转换为Consumer,并且试图在Consumer上运行Browserify,但出现此错误:ParseError: 'import' and 'export' may appear only with 'sourceType: module'。库确实包含ES6 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') 
} 
+0

你的'tsconfig.json'文件是什么样的?像这样的'ParseError'使得它听起来像TS编译器不通过文件。 –

+0

@DaveV我不确定TS编译器是什么。 AFAIK'ParseError'是一个巴别塔的事情。 – Rob

回答

4

Browserify变换可以被配置为全球性的,这意味着他们将会是ap也在node_modules之内的文件。

该配置是按变换的。随着babelify,你配置它是这样的:

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

或者,如果您使用的是命令行,像这样:

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

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

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

Babelify也实现了ignore选项,因此可以将其配置为只转换您想要的node_modules中的文件。有更多的信息here

另一种解决方案是在library模块的package.json中包含类似的browserify/babelify配置。处理依赖关系时,Browserify将检查所有依赖关系的文件以进行转换,并应用任何已配置的文件。

+0

这听起来像是解决方案,但是碰巧知道如何在package.json的'browserify'节中表达它? – Rob

+1

当我碰到'global:true'时,我收到了'Unexpected token'g''错误。我试图用双引号将它包裹起来,使得这个错误无声无息,但仍然给出了原始的“ParserError”。似乎babelify不尊重这一设置。 – Rob

+0

Babelify应该使用该设置;我很确定我过去使用过它。在'package.json'文件中使用时,browserify可能/可能忽略'global'设置。事实上,想想看,这可能是发生了什么事情(我必须检查来源确认)。另一种选择是在你正在使用的模块的package.json中包含一个类似的'browserify'设置 - 那么就不需要'global'设置。 – cartant